Ensure all listeners receive the event, even if one raises an exception

If a listener raises an error, ensure that all other listeners still
receive the event.

Additionally allow the registration of an error handler that is call if
a listener raises an error. The handler gets the listener (either the
specified object or the source block) and the full_payload.