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 method that throws an
exception (const_missing) is used to create the pretty
enum DSL.
Merge pull request #58 from relaxdiego/enum

Second attempt at implementing Enum