Creates and prepares event information.
The primary reason for this interface is to allow for deferred creation
of the Event. If a NoOpEventPublisher is being used then the prepareEvent()
method will never get called.
As of Java 8 a Lambda expression could be used as the implementation of
this FunctionalInterface