* Implement audio output
* Semi-proper audio output
* Add audio enable and vsync settings
* Add audio enable and vsync settings
* Optimize audio output a bit
* Make max ring buffer timeout smaller
* Make max ring buffer timeout smaller
* Revert to spinlocking for audio sync
* Sleep emulator thread if too many samples queued
* Fix Teakra submodule breaking
* Don't start audio device too soon
* Fix IWYU errors
* Fix compilation errors on GCC/Clang
* Ignore std::hardware_destructive_interference_size on Android NDK
* Fix more IWYU errors
`config` was being consumed much too early before it has a chance to
call `load`. This caused GPU to read weird uninitialized data, and then
`load` called, and then further initialization to occur based on default
data and the data inside of `config.toml`. `EmulatorConfig` needs to be
loaded in first before any sort of initialization happens, by adding a
new constructor so that it can be initialized sooner.
There are still some initialization errors to work through, such as
config not being initialized properly by the time GPU tries to utilize
it too. Also some life-time issues. But manually forcing it to use the
Null backnd successfully works and allows games to be "played"
headlessly.