Refactor runner into two classes - Runner & Executor

The Runner is the public-facing API. Internally, it does very little but pass
method calls onto an Executor. The Executors come in two flavors (for now?),
Sequential & Parallel. The Runner simply picks one of these based on how many
jobs are requested.