Make an Execution[T] type, which is a monad, which makes composing Jobs easy.

so right now, it's common to do pipe.stuff.write(sink).stuff.write(sink2) and so on...if we want to encourage functional purity, we'd force the user to compose executions, right? I wonder if it would be useful to have another
```
def writeThrough(dest: TypedSource[T] with TypedSink[T]): Execution[TypedPipe[T]]
```

where it wouldn't force the user to compose the Executions.

That said, I'm still ruminating on whether or not this is necessary...