Serialization and deserialization of User-Defined Types with type aliases

This uses a new class called `UserDefinedTypeValue` to get around the "ambiguous type problem".  Fixes #32. Hypothetically related to #7.
Does this give anything other than an alias for existing types (ie. typedef)?