Replace construction completely with macro

This replaces all constructors, destructors, assignement and compare
operators with a global macro (for all object that inherit Base)

This also introduces a new constructor that takes a Private* again. This
allows us to remove the GW_[CD|D]_EX macro again from all non-const
methods where it is used. Further, this one is not explicit (as QESDP's
constructor), so we can also remove the PrivatePtr in all the
"return PrivatePtr(new Private...);" calls.