Add an ExecutionApp trait for objects to skip the Job class

I've used this in some private code. Seems to work well. Let's you write:

```scala
object MyJob extends ExecutionApp {
  def job = TypedPipe.from(List(1, 2, 3)).distinct.writeExecution(TypedTsv("output"))
}
```

This is the last piece of the modern, functionally pure way to write and run the jobs.

If you want to control have `(Config, Mode)` is parsed and created, override `def config`