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.

It really depends on whether an instance of this class is called from multiple threads.

If is is NOT, and we can guarantee that it isn't, then this is fine.  If if it IS, then we should create a mutex to handle this potential race condition.