Properly support `.pipe()` scenarios when using `storage.upload` and `storage.download`

@kenperkins Fixes #219. Branched off of `0.9.0` but I could easily rebase or cherry-pick into `0.8.x` if that's appropriate. Given the breaking nature of this I actually think that might not be a bad idea.

More discussion of the issue #219