Make Term<T> destructor protected and non-virtual

This prevents polymorphic deletions and avoids the overhead of vtables.
See also http://www.gotw.ca/publications/mill18.htm