Fix profile upgrade from 13 to 14 (#17589)
Fixes #17587
Fixes #17588
Summary of the issue:
The profile upgrade steps introduced in #17547 would cause NVDA to crash, and the user's configuration to be reset, if the user had an audio output device set in their NVDA configuration.
Description of user facing changes
Upgrading from configuration version 13 to 14 no longer crashes NVDA and resets the user's configuration.
Description of development approach
The issue was caused because `config.profileUpgradeSteps.upgradeConfigFrom_13_to_14` attempts to import `nvwave`, which, through its own imports, eventually attempts to use gettext. Since gettext has not yet been initialised, this raises an exception. As we are so early in NVDA initialisation, this exception causes the rest of NVDA's initialisation to fail critically.
To resolve this, `_getOutputDevices` and `_AudioOutputDevice` have been moved to the new `utils.mmdevice`. I initially thought to move them to `audio.utils`, but initialisation of `audio` runs into the same problem.
Testing strategy:
Checked out `a7fa0d6`, made sure the config version was `13`, ran NVDA and selected an audio output device. Checked out `fixProfileUpgrade`, ran NVDA, and ensured that it ran as expected, the profile was correctly updated, there was no loss of settings, and the correct output device was in use.