Eng 6591 partial aggregate

I've been moving in the direction of defining destructor bodies -- even empty ones -- in the .cpp file -- they are mostly called virtually (not inline) anyway and having them in the .cpp can sometimes help to minimize header dependencies for some cases with smart pointers as data members. BTW, I've also been moving in the direction of using smart pointers rather than having explicit code in destructors.