As of now `g_Profiler2` has static storage duration but can "only" be used between `initialize()` and `shutdown()`, that is basicly inside `main()`. Some member-functions `ENSURE` it was initialized.
This diff moves the object inside `main()`. `initialize()` and `shutdown()` are removed constructor and destructor handle everything.
`g_Profiler2` is a pointer staticly initialized to `nullptr` and points to the object once and as long as it lives (`= this` in the constructor, `= nullptr` in the destructor).