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'm sorry, I was wrong.  It was another section of code that had that issue. 

So I did inline one of these - but inlining both exceeded my "levels of indirection" meter - so I'm meeting you halfway!