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.

Ok, I think I misread what was going on here. Expressed in pseudo-JSON, params is expected to be `[ { a : b, c : d } ]`. I had that backward, so it was more like `{ [ b, d ] }`, which I realize doesn't even make sense.

We're good here, and I'd even say this is a nice extra up-front validation. Am I the only one confused by this, or would a short comment be worth adding? `// params is expected to be null, empty, or an array where the single item is an object.`