Initial deserialization code

For murphy :)

Currently only support types, will move to support actual values...
soon(tm) (hopefully tomorrow).

There is a bit of awkwardness WRT how field names are used, since there
this is pure object construction instead of using reflection. As a result
we need a bunch of string constants shared between the serialization and
deserialization process.

Currently the user defined types field is left not used, and attribute are
only referring to the user defined types as per 134. I think we should
just unroll all user types in the IR since rebuilding them will be tedious
and they will have little meaning in the backend (perhaps there is a good
reason for it that I haven't thought of?)

Related to #86
What I mean here is that the userDefinedTypes isn't a concrete class, so I'm not sure what is actually constructed for these.