cPimpl_ptr overhaul

As stated in issue #5 the pimpl pointer could
not be created if the template pointer type was
incomplete. This is now a complete overhaul of the
class and resolves #5.

Instead of relying on aligned storage we just now
emulate th behaviour of unique_ptr as close as possible
but with actually fixing the const issue on get().
This guarantees that no shennanigans will happen in
const defined methods.

Internally the class just stores a RAW pointer that
gets fed into the class via constructor. We define
a default deleter but also a customized can be given.
To make it easier to create a new instance we supplied
the CreatePimplPtr() function that creates the type
simply with the new operator.

Extensive testing is still necessary but the class
is not yet in use anywhere.