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.
There's actually a decent reason why I'm catching and then failing in the catch block -- the `fail` is a diagnostic to differentiate between "undeclared identifier" during (de)serialization and "undeclared identifier" when I look up the type in the Schematic.