After feedback changed Enum implementation to be a function.
The main side effect is that the `Enum` type can't be registered.
Use `EnumFactory()` to build an `Enum`.