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 don't usually comment on whitespace, but don't we usually put a line break between the template params and the return type, and also an empty line between functions?