Add a polymorphic_ptr<T> smart pointer data type. It's a somewhat silly