code: func NewFileSystem(root, trash string) FileSystem {
  	var err error
  	if root, err = filepath.Abs(root); err != nil {
  		return &fsImplErr{err}
  	}
  	if trash != "" {
  		if trash, err = filepath.Abs(trash); err != nil {
  			return &fsImplErr{err}
  		}
  	} else {
  		trash = filepath.Join(root, ".cipd_trash")
  	}
  	return &fsImpl{root: root, trash: trash}
  }
docs: // NewFileSystem returns default FileSystem implementation.
  //
  // It operates with files under a given path. All methods accept absolute paths
  // or paths relative to current working directory. FileSystem will ensure they
  // are under 'root' directory.
  //
  // It can also accept a path to a directory to put "trash" into: files that
  // can't be removed because there are some processes keeping lock on them.
  // This is useful on Windows when replacing running executables. The trash
  // directory must be on the same disk as the root directory.
  //
  // It 'trash' is empty string, the trash directory will be created under
  // 'root'.