This transforms IGUIObject settings to a template class and IGUIObject::AddSetting to a template function.
This means the type information is available for all methods operating with the setting type, which is easier for the authors, allows for compile-time checks and optimizations.
Remove the enum that was used to indirectly obtain the setting type at runtime.
Revised SGUISetting and enum from rP290 (rP74), std::function from rP22574.
Move this to GUIUtil.cpp in anticipation of merging the other functions and since its a complex class that should be in a separate file concering only settings.
rP22596 removed one fringe use case of the enum.