Verify that code behavior is not changed.
* Notice that inheritance order matters. If the IGUIObject is not constructed first, the IButtonBehavior base class will call RegisterSetting on the uninitialized GUI object.
* Notice that the JSInterface_IGUITextOwner removal is necessary, because the IGUIObject* stored using JS SetPrivate cannot be statically cast to IGUITextOwner* since they're not inherited anymore. (`static_cast from 'IGUIObject *' to 'IGUITextOwner *', which are not related by inheritance, is not allowed`)
* Notice that we can cast the `IGUIObject*` to `CText*` and then operate from there, which is strictly more correct since the previous GetTextSize function only return the size of the first CGUIText, while it can store multiple. So every leaf class can decide more closely which values it wants to return.