Trait for objects that can be sorted by a TermOrder. It is a
design decision that the used order cannot be queried from an object (so that
it must not be stored in the object). It can be checked whether an object is
consistent with a certain given order, however.
Re-sort an object with a new TermOrder.
Re-sort an object with a new TermOrder. It is guaranteed that
the result isSortedBy(order)