Made all polymorphic destructors virtual

When "delete" is called on a generic pointer, virtual destructors force
the call of the proper inherited destructor.