Better type coercion for Enums

Improved handling on `Enum` values during type coercion

- Checks _UPPER_UNDERSCORE_, _lower_underscore_, _lower-hyphen_, _lowerCamel_ and _UpperCamel_ options when coercing strings
- Exports the function used, allowing it to be registered with a default value for unparseable input
- Adds unit tests for the enum coercion functionality