Convert enum values in read attribute

Fix for issue #16459 and issue #14017 
@sachin004: I believe @egilburg was trying to suggest you use that code inside the `define_method(:read_attribute) do |attr_name|` block.

I would also suggest that it might beneficial to avoid the double-lookup of an enum in `defined_enums` like this:

```ruby
define_method(:read_attribute) do |attr_name|
  attr_name = attr_name.to_s
  read_attribute = super(attr_name)
  if defined_enum = defined_enums[attr_name]
    read_attribute = defined_enum.key(read_attribute)
  end
  read_attribute
end
```

Also it seems that this override for the `read_attribute` method does not need to have a closure over `defined_enums`, since `defined_enums` is a class attribute, so we can actually move the whole method into `@_enum_methods_module` (the same way `def save_changed_attribute` is already there). This way there will be less methods created, less memory etc. What do you think?