Propagate SLF4J MDC map across async event invocations

The logging Mapped Diagnostic Context of the event-firing thread is not available to the event execution threads, since they are not created by the calling thread. This means MDC cannot be used with async events unless the MDC is passed into the thread executing the event listener. The MDC can be passed in by including it as a property on the EventMessage, populated on instantiation of the EventMessage and loaded into the invocations thread's MDC before the listeners are executed.