Using a LIFO stack for events was a dumb idea in the first place, this
should've been a FIFO queue from the beginning.
This allows the system to respond to events in the same order that they
are generated, instead of always responding to the newest event first.
Previously this used a very hacky way to push and pop events on the
event stack. This especially caused issues since it disabled and
enabled interrupts, and these routines are called in an interrupt
handler, which breaks things in some cases :p