Make it possible to remove unused enum values by setting them to `nil`.

The intent is to make it clear that 1. the implementation is sensitive to positional changes 2. the implicit mapping is part of the public API (it has to be, otherwise it won't work across versions).

Also made it possible to replace unused enum values with `nil`, so you can easily clean out old unused values and are not forced to drop into the explicitly mapping syntax.