unique_ptr enhancement that works with the NVI pattern.
It stores a pointer to the original class, but exposes the base class so when
it deletes the class it deletes the original class without the need of a virtual
destructor.
Interfaces use NVI pattern again (non-virtual dtor).
However the downside of this is that I have to disable the -Weffc++ warnings
as they are giving me false positives when a class does a private or protected
inherit and doesn't have a virtual destructor. I cannot disable the warning
so I have to disable all of -Weffc++ instead :-(