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 last projector of a chain is now a "ResultProvider"
which exposes the result as listenableFuture. Due to this
Projectors can do network io without having to block.