Implement XML input/output for AssetMetadata.

@cpennington @dmitchell 
Note that the tests use an XSD to validate the generated XML. The XSD is kept in the test directory for now - but a better place should be found in the future.
These attribute lists divvy them up into groups and ATTRS_ALLOWED_TO_UPDATE is used by the update() method, although I realize it doesn't stop other code from actually updating those attributes. That update() method allows them both to update, with the assumption that the calling code will ensure that the user_id for edited_by corresponds to the email address for edited_by_email. The "update" implies mutability.