change the Projector interfaces to support long running tasks

the intermediate projectors now no longer have to support
"gathering" rows but only have to pass them to a downstream.

the projectors result is now a listenableFuture. Due to this
Projectors can do network io without having to block.