Wrap instantiation in a hooked function
Use the global to get to the instance.

This allows for an extended child class to set the global and for everything to still work provided the child class provides their own static `get_instance()` method which sets their own static `$instance` property.
Force instantiation via `get_instance()` by making the constructor protected