Use sys.__excepthook__ to be pythonic. cc: s0undt3ch
Add test.assertion
Route module exceptions back to the master

Refs #11613

This first routes events across the minion event bus before kicking them
back to the master. I think this may give us more flexibility in the
future, in terms of error streaming and pluggable error handling,
masterless, etc, etc.
Register error handlers with reactor as callbacks

This is kind of a wild idea, but here goes.

I modified the reactor system to accept raw functions that act as
callbacks.

This means that we can get rid of loops that check for events and
instead just write functions that can register *theselves* with the
reactor and then have events streamed back to them. This has a lot of
interesting applications, such as facilitating a GUI that, instead of
using an REST API, could simply have a lightweight event-driven API that
registers with the reactor and has updates streamed back to it.

This is a proof of concept of this idea which illustrates minion error
messages being tossed across the event bus and the master registering an
error handler with the reactor to process them.
Support job data
Workflow to display minion exceptions in LocalClient
Lint fixes
Merge pull request #16861 from cachedout/issue_11631

Route minion module failures through the event system