Use variadic template for RecurseObject from rP31 and move it from GUIutil to IGUIObject.
Unifies the four copies of the function while making it more versatile.
Supersede the hardcoded GUIRR enum and CheckIfRestricted function with a flexible member function pointer.
Replace the custom IGUIObject iterator with a casually iterable GetChildren getter, so that it is more obvious what it iterates on.
Implement TODO from rP141, i.e. RecurseObject not iterating over the base object.
Differential Revision: https://code.wildfiregames.com/D2204
Tested on: gcc 9.1.0, clang 8.0.1, VS2015