Evented runners

Modified the runner system to be fully event based.

* Injects a special function at runtime called 'progress()' to stream runner progress events across the event bus
* Now uses a generator to collect and display events off the event bus
* All runners modified to direct output to the event bus instead of to stdout
* Runners can now dump to a master job cache if the returner supports it
* Output encoding now handled by the output system instead of the runner code
* New --quiet option to suppress all output in a run
* New --async option to allow runners to be fire-and-forget

Refs #15759