Clean up `EnumSet`

Make `EnumSet` portable by using a fixed-size unsigned intger, `u32` as
storage. The previous choice of `uint` created portability hazards as the error
checking is done at runtime.

Mark the `from_u32` method of the trait `CLike` as unsafe, as it is supposed to
be implemented without error checking.

Code using `EnumSet` needs to be updated to use `u32`s.
I think this needs an `InvariantType<E>` marker.