Refactor type system to lay foundation to support Map[Any]

 - basic idea is to enable map support for any defined type (primitive, enum or model)
 - for these types we know we can serialize/deserialize, so we should be able to support maps w/ values as these types
 - keys remain restricted to strings per json
 - major refactoring under the hood to enable much better representation of the type container (singleton, list, or map)
 - rewrite of the ruby client to support the new types - makes code readable and provides better stack traces on errors