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's fine as far as the internals of visitStateItems/visitLeaves goes. The ledger is always an immutable snapshot. Since the ledger is immutable, its maps are immutable. So no locks need to be held nor can anything change.