sort enum constructors by tag values

As it stands now, enumeration constructors are defined in the order they
are given in the c source, but they might not be in ascending order of
value. This prevents derived Bounded instanced from
working properly. Reordering the constructors solves this problem
without resorting heavier measures like creating custom instances. Also,
it only effects enums with explicit tags.