Refactor the way that errors are handled

Don't confuse reported errors, and exceptions.  Reported messages should just be
collected and reported to the user, but not necessarily used for control flow.