New-UI Settings Screen

This replaces the current settings screen with a Lua/new-ui implementation. Settings are exposed to Lua through functions in the Engine module. This replaces/finishes the work started in #2236.

Remaining to-do items:

* Add missing options: Invert Y Mouse, Display Nav Tunnels.
* Go through to make sure all the visible text is translatable, and move translations out into Lua. I made an attempt at this a long time ago for #2236, but it needs to be re-done. (Tedious but not difficult)
* The various new functions in the Engine module need to be documented.

Changes:

* The first several commits are not specific to the settings screen at all. If desired I'll submit them as a separate PR. These are various core UI enhancements. Some have been discussed on IRC, some are clean-up, some are extending the Lua API a bit to support what I wanted to use in the settings screen.
* The UI system now understands (some) joystick events. These are currently dispatched directly to the base widget (ie, the context), which is perhaps not very nice. Any widget that wants to access joystick events (currently the `GameUI::KeyBindingCapture` and `GameUI::AxisBindingCapture` widgets) can do it by hooking into the `onJoystick*` signals on the context. I don't like it, but I'm not sure how joystick event dispatch should work; adding a "joystick focus" akin to "keyboard focus" is possible but seemed like a lot of work for a structure that I suspect we wouldn't want to keep. I suspect the answer is that the KeyBindings system needs to be subsumed into the new-ui event dispatch system somehow, unifying widget shortcuts and game control bindings. However, I'm not sure what that will look like and it's clearly a much larger and more invasive change than is required just to make the settings screen work, so I haven't attempted it.
* Most of the game settings have now been exposed through functions on the Engine module.
* The settings screen has been re-implemented in Lua.
* The old settings screen has been removed.