Note: actually all of this seems against the spirit of C++ (and OO in general). This is a do-it-yourself aproach
which adds far to much complexity (accidental, not fundamental complexity). So I checked it in for the record,
but will abandon this aproach and rely on overloading of operator new / delete if necessary (and when we really need it)