Adds HasMidiPart class

- Adds HasMidiProgram constraint to toMidi etc
Midi backend now adds program change events