Change GUI settings to explicitly be member variables.
Completes work starting in D2313 / rP23005:
- Make C++ mistakes where values can be changed without messages being sent easier to notice / harder to do.
- Make the IGUISetting interface more flexible, allowing custom settings implementing their own logic. This is used to clean up hotkey code introduced in rP22845.
Side effects:
- FromJSVal_Vector clears the vector being passed in. I have some vague memory of not doing that in D24 / rP19115 as an optimisation, but it seems more like a footgun to me.
- Most usage of SetSettingFromString is replaced by direct method calls, as we can generally cast to the proper GUI object type. Where we can't, it is kept as a poor's man virtual dispatch.
- It moves a few member variables elsewhere, e.g. TextOwner now gets its own member variable settings.
Differential Revision: https://code.wildfiregames.com/D3892