Todo
  * FIXME: More -dry-run checks for object transfer
  * Might be quicker to check md5sums first? for swift <-> swift certainly, and maybe for small files
  * swift: Ignoring the pseudo directories
    * if object.PseudoDirectory {
      * fmt.Printf("%9s %19s %s\n", "Directory", "-", fs.Remote())
  * Make Account wrapper
    * limit bandwidth for a pool of all individual connectinos
    * do timeouts by setting a limit, seeing whether io has happened
      and resetting it if it has
    * make Account do progress meter
  * Make logging controllable with flags (mostly done)
  * -timeout: Make all timeouts be settable with command line parameters
  * Windows paths? Do we need to translate / and \?
  * Make a fs.Errorf and count errors and log them at a different level
  * Add max object size to fs metadata - 5GB for swift, infinite for local, ? for s3
    * tie into -max-size flag
  * FIXME Make NewFs to return err.IsAnObject so can put the LimitedFs
    creation in common code? Or try for as much as possible?
  * FIXME Account all the transactons (ls etc) using a different
    Roundtripper wrapper which wraps the transactions?
  * FIXME write tests for local file system
  * FIXME implement tests for single file operations in rclonetest
  * Need to make directory objects otherwise can't upload an empty directory
    * Or could upload empty directories only?

Ideas
  * could do encryption - put IV into metadata?
  * optimise remote copy container to another container using remote
    copy if local is same as remote - use an optional Copier interface
  * support
      * sftp
      * scp
      * rsync over ssh
  * control times sync (which is slow with some remotes) with -a --archive flag?
  * Copy a glob pattern - could do with LimitedFs

s3
  * Can maybe set last modified?
    * https://forums.aws.amazon.com/message.jspa?messageID=214062
    * Otherwise can set metadata
  * Returns etag and last modified in bucket list

Bugs
  * Non verbose - not sure number transferred got counted up? CHECK
  * When doing copy it recurses the whole of the destination FS which isn't necessary

Making a release
  * go install -v ./...
  * go test ./...
  * rclonetest/test.sh
  * make tag
  * edit README.md
  * git commit fs/version.go README.md docs/content/downloads.md
  * make retag
  * . ~/bin/go-cross
  * make cross
  * make upload
  * make upload_website
  * git push --tags origin master
