implement fully_qualified_name on messages and enums, implement name to value mapping on enums, make enums extend Enum instead of include Enum

Re-sending this pull request as I re-forked