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.

I can see why you might want to get rid of the `&` since the caller may be temporary, but why not leave it `const`?