Thoughts: - `send_error` should throw by default, but have an optional argument to force the execution to continue without throwing - the courier instance should keep track of the number of unthrown errors it has issued - add a new method for users to indicate they are ready to throw after collecting potential errors (maybe `check_for_unthrown_errors`?) - When a courier is destroyed, it should check if there are unthrown errors and do something appropriate