code: function Item(item) {
    if (!item) item = {};
  
    utils.syncContents(this, item.contents || item.content);
    this.cache = item.cache || {};
    this.options = item.options || {};
    this.locals = item.locals || {};
    this.data = item.data || {};
  
    this.define('contents', {
      configurable: true,
      enumerable: false,
      set: function(val) {
        utils.syncContents(this, val);
      },
      get: function() {
        return this._contents;
      }
    });
  
    var base = item.base;
    delete item.base;
  
    Vinyl.call(this, item);
    Base.call(this, item);
    delete this.base;
    this.base = base;
  
    for (var key in item) {
      var val = item[key];
      if (key === 'stat' && utils.isObject(val) && val.mode) {
        this.set(key, utils.cloneStats(val));
      } else if (val) {
        this.set(key, val);
      }
    }
  
    this.is('Item');
    this.use(utils.option());
    this.use(utils.plugin());
  }
docs: Create an instance of `Item`. Optionally pass a default object to use. See [vinyl][]
  docs for API details and additional documentation.
  
  ```js
  var item = new Item({
  path: 'foo.html',
  contents: new Buffer('...')
  });
  ```
  @param {Object} `item`
  @api public