DO NOT MERGE: Hale serializer meeting Crichton functionality

This is an early commit for the new Hale serializer.  Released for comment.  It's here for feedback, but I am well aware that it needs substantial code cleanup.
As long as we're nitpicking, you can even do `render_type(field_type, type = SEMANTIC_TYPES[field_type.to_sym])` for the same effect.

But this general idiom of a method taking two arguments and expecting exactly one of them to be non-nil isn't something I see a lot of in Ruby, mainly since arguments aren't typed, so you see more of
```def render_type(type)
  if type.is_a?(Hash) # or respond_to?(:[])
```