Create intermediate representation for event types
Use Events for Systems generation
Accept Event as first argument to Systems::trigger
Pass event into systems
Change Event enum to hold references