Reflection support:

- Links between objects: message classes and enum modules link back to
  MessageDefs/EnumDefs via "descriptor" method; MessageDefs and EnumDefs
  link back to generated classes/modules via "msgclass"/"enummodule"
  methods.
- MessageDefs have field lookup by name.
- FieldDefs link to resolved MessageDef/EnumDef objects.
- FieldDefs can get and set fields on messages of the appropriate type.
- EnumDefs can return the enum mapping as a hashmap.

Misc changes:

- Recursion depth limit on message encoding, to protect against
  user-created object graph cycles.
- Support accessing fields with "bad" names (conflicting with builtin
  Ruby Object method names) via prepended underscore.