Redesigned MIDI events to use chain processing

Very similar to the way audio processing works. It is handled by the timing
manager, and supports MIDI filters