Extends the internal events to also work in a way for modules (only publishing).
Also breaks out the Event trait to it's own file.