Add an Executor to run flows without a Job

This is based on #914 The goal here is to make it easy to take a function that produces a TypedPipe, and to run that.

Next, we should have a methods that write `TypedPipe[T]` or `ValuePipe[T]` to the temp directory, then reads that in the Future to get a `Iterable[T]` or `T` respectively.

With the above, you can easily write jobs that loop that does some ML algorithm, for instance.
Ok cool fair enough, not used the scala futures really enough to know when those are needed/not needed.