Show error dialog box for errors in async install routines

Show user when something goes wrong in the install routines!

1. Adds a global callback that is called if any thread - including ones spawned by utils.async - raises an exception.
2. Adds a 'fatal mesage' dialog to use for that callback
3. Changes a bunch of SystemExit exceptions to Exception, because the global exception handler wasn't catching those - they don't derive from Exception and aren't intended to be used for errors (SystemExit is just for sys.exit() )