Streaming rpc

Here it is, the streaming RPC changelist!

I spent a long time cleaning it up into as few independent changelists as possible, and I hope it's readable for you.

Or better yet, assert and then throw. That way, you get a useful break/dump in a debug build and stop in a release build.