storage: use streams.

I know this is beating a dead horse, but I finally got streams working with the help of [duplexify](https://github.com/mafintosh/duplexify). Getting this in before M1 release would be fantastic, since this is such a fundamental Node philosophy, and is relied on in many apps.

Given that the streams worked out, I simplified the signature of `Bucket#write`. If a user wishes to use our writable, they are free to open their readable pipeline however they wish, then simply pipe it to `bucket.createWriteStream()` (as opposed to passing a readable to #write). As an added shortcut, `Bucket#write` accepts a string or buffer directly: `bucket.write('file', 'Hi!', function(err) {});`