Local Jobs UI

This adds a window for tracking jobs dispatched via `LocalDispatchers`. It adds the concept of a `JobPool`, and a default pool which is shared among all `LocalDispatchers` that use the default constructor. There is one `LocalJobsWindow` per `JobPool`, which provides a table view of the jobs in the pool, with some stats on memory and cpu usage. There is also a details tab for more information on the first selected job, and a messages tab which tracks the progress of the first selected job. Finally, there is a Kill button which can be used to interrupt the selected jobs.

The job window for the default pool can be accessed via the "Execute->View Local Jobs" menu.

Fixes #872.

Note that bb998f6 also fixed a bug where failed batches wouldn't prevent downstream requirements from executing.