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.