Allow Marshaling of Products
Add Boolean type definition
Add Type#match which restricts value to the type only
Add #update method to Products to construct new updated instances
ParametrizedType should be child of Type
Rename #generate and #parse serialization methods to #dump and #load