Add support for --fail-fast flag

* Some long planned runner design changes.
* It now also uses the emitter pattern