Issue #41: Part I (preview only)

This is a rough cut of event listener registration and delivery layer, without any actual event firings wired into all the pertinent places - that'll be part II.

I would like some feedback on this though, since it's doubtful this is in a state where it can be merged, but logically this is a good place to split up the work in two parts.