multiple enum improvements

The default implementation of succ, pred, enumFrom and enumFromTo error
out when the defined tags are not contiguous. This patch provides
implementations for those functions that work even this case.
Note that the new functions should _agree_ with the default implementations,
that is, they only produce different results when the default
implementation would return bottom.

This is especially useful for "flag" types where a list of all flag
values is needed to check them against a bitmask