Support streaming operations

Support running mapred and keys in a streaming fashion, i.e. run the callback with every chunk of data received.

This is a bit of a work in progress, and I still have to add tests, currently they're broken for me locally, but I wanted to bring it up for discussion first.