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 have concerns about yielding within a call to `visitLeaves`. This could break all sorts of invariants. What if a lock is held? @JoelKatz Can you review this?