storage: docs & rewrite streams.

`ReadableStream` and `BufferStream` implement stream.Readable, and I created a `WritableStream`, which works similar to Readable, but obviously in reverse :)

This also includes elongated documentation.
According to standard library, _read shouldn't be used as a one-time invoker to open a remote stream. It's invoked every time your consumer needs more data. If we don't honor their read requests, we end up buffering much data in memory again because the consumer can't process it in the same rate we push -- and it's buffered.

If we don't emit `readable` when authorization is completed, consumer starves and keeps polling indefinitely, which ended up wasting cpu time for me.