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.

So you're allowing the caller to nest the params array inside a single-item object? If that's the case, shouldn't you be checking that `params.isArray()` here?