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.