Serialization and deserialization of schematics

Includes all these features and more:

* Handles constraints
* Serializes nodes and connections correctly (by specifying their typename)
* Handles derived intermediate types through a depth-first search algorithm (deserialization never sees a derived type before its base type).
Do we need this if each children is added automatically as they are constructed?