`typedef struct/union/enum name { ... } name_again;` is not needed whe compiling C++, moving the name at the back to be in front of the object and removing `typedef` makes it usable the very same way.
This also replaces typedefs with the using keyword. They have better readability, especially for function pointer types, and would allow more flexibility when used with templates.
When adding entries to scenery groups by hand, like we do for a lot of ToonTowner's stuff, it currently tries to get the loaded scenery group. If this happens not to be loaded at that time, this will fail.
Instead, hardcode the headers - that's how object .DATs do this anyway.
* GCC suddenly decided `Object` should be marked as `final`, however it is
used as a base class for more specific types that inherit from it.
* Also ignore -Wsuggest-final-methods for Object class
* Guard Object::GetName from being final