custom event system for js. unlike the regular event system, this doesn't "attach" events to anything; rather, an event listener is simply a function that gets called when an event is triggered. currently, this is synchronous; triggering an event will take as long as calling all its listeners.