A trait to treat any type as an enum.
If a type has a reasonably small number of variants,
for example a `struct A(bool, bool)` which has 4 variants,
this trait provides a 1-to-1 mapping from type value to a
discriminant value.
It also provides an iterator over all the possible values.
This crate is mainly meant to be used along with
`enum_like_derive` and `enum_vec`.