Second attempt at implementing Enum

This implementation looks cleaner but the downside is that using the EnumType::ElementName format to access elements is dangerous because it will never raise an exception if the name is misspelled since the same class method that throws an exception (const_missing) is used to create the pretty enum DSL.

I'll let you decide if you want to use this or not. I don't mind either way. :-)