Roundtrip polymorphistic serialization works

When the runtime type being serialized differs from the static
(e.g. property) type, a tag is emitted with the full qualified type
name. This allows us to roundtrip while preserving all types.