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.

This code is essentially what was there before, except that I added more checking - I shouldn't be checking twice if `params.isArray()`.

That said, I changed the `> 1` to `!= ` in the "belt-and-suspenders" sort of attitude.