code: function File(file, options) {
    file = file || {};
    this.file = file;
    this.options = file.options || options || {};
    this.type = this.file.type;
    this.origPath = file.origPath;
  
    // Record path change
    var history = file.path ? [file.path] : file.history;
    this.history = history || [];
  
    this.cwd = file.cwd || process.cwd();
    this.base = file.base || this.cwd;
  
    // Stat = files stats object
    this.stat = file.stat || null;
    this._isFile = true;
  }
docs: This is based on https://github.com/gulpjs/vinyl, but with a ton of
  changes, since we don't need to clone or use streams or contents.
  We only need getters/setters for paths.