File Storage API v2

This patches a few issues with the storage API realized when writing a plugin for Amazon S3. This makes a few adjustments to the storage API:

  * Add a flush() method, to inform the backend that no more write() calls will be invoked
  * Add getNativeHashAlgos() and getHashDigest() which allow the backend to advertise hashing algorithms supported remotely. getHashDigest() is used to fetch a hash in the migration process without reading the entire file contents again.
  * Download file name generation more consistent (handled in class HTTP)
  * Migration will honor the chunk size advertised by the target backend. For something like the database backend, it is useful if every call to the write() method contains a specific amount of data, if possible
  * As a bonus, the Http::redirect() may hang under some circumstances. This patch includes a fix to browser hang on redirect