Improvement to ScalaObjectMapper

The ScalaObjectMapper trait is now smarter about constructing JavaType objects from a Manifest, and has the ability to read values into a larger set of both Scala and Java types with full parameterization.

Additionally, these JavaTypes are cached on construction to help with performance.