Events framework

As one might expect, this framework makes use of the observer
pattern. This will be one of the most important ways that the
functionality of various plugins are invoked.