A redefinition of the Prelude's Enum class in order to render it safe.
That is, the Haskell Language Report defines pred, succ, fromEnum, and toEnum
to be partial functions when the type is Bounded, but this is unacceptable.
We define a new type-class hierarchy for enumeration which is safe and also
generalizes to cover types which can only be enumerated in one direction.