Improve streaming support

Streaming now works like this:

* Open a channel
* Start a future streaming that data with a handle on the channel
* If the channel closes for any reason beside the server closing it,
  cancel the future

Previously, the streaming would continue even if the channel was closed,
which could result in blocking