Expand the event system to have explicit Event objects and potentially many Notifiers. Previously they was only one notifier and one (implied) event. A lot of this is stolen from #358.