MidiDevice load/save using device names instead of device number

This adds a "IsOutput" parameter to the MidiDevice() so we know if we are in or output.

Settings are saved as "midiplugin/Input/{device name}/{setting}=value"
Instead of "midiplugin/[device number}/{setting}=value"

Using the name instead of enumerator number allows devices to be added or removed and the configuration will still be associated with the correct input by name.

For compatibility, if the new setting name is not found, it tries the old setting name and loads that.
All new settings saves are using the new syntax.