slab/menuband: dual-backend synth — MIDISynth primary, sampler fallback
Dragging across the instrument grid now sounds each cell on mouseDown
with no perceptible swap latency once the MIDISynth backend has come up.
The synth keeps two backends:
1. AVAudioUnit MIDISynth, instantiated asynchronously via
AVAudioUnit.instantiate(with:options:). Bank loaded once, every
program preloaded via kAUMIDISynthProperty_EnablePreload, MIDI
events sent directly via MusicDeviceMIDIEvent. Program switches
are sub-millisecond.
2. AVAudioUnitSampler (the prior backend), always live. Used while
MIDISynth is still spinning up so the user always hears something
from the very first click.
setMelodicProgram + noteOn route to whichever backend is currently
hot. Once MIDISynth flips ready, the controller's hover-preview path
drops its 70 ms swap-settle delay and fires noteOn immediately on
mouseDown — the click feels like the menubar piano keys.
Octave hint label capitalized (Octave).