Put enum types into interfaces.

Enums should not be defined in implementations since they’re used by
other implementations which may not know each other due to the
abstraction constraints (but interfaces are visible to them).