Virtualize destructors to make sure they get called

May actually prevent a leak or two.
AFAICT there's no need to have a virtual destructor for this. No need to mark destructors of classes based in NonCopyable as overriding either.