Initial work refactoring the class metadata systems
Overall clean up and refactoring of the metadata and low-level serialization support.
Separated copy handling from serialization.
Split out field and constructor access to allow alternate strategies in the future.
A little more refactoring and documentation. Merged a number of classes back into their interfaces (the split was unnecessary).
Some further refactoring, moving replication and ownership metadata into FieldMetadata subclasses (and adding support for FieldMetadata subclasses).