support updating objectClasses for a User

This PR does a few things:

- moves existing deactivatedUid and new objectClass meta-data to a common implementation meta-data HashMap.
- implementation meta-data is not observed for object equality
- updates objectClasses based on current state of User object
- always updates objectClass on object update
removing an objectClass won't remove the attributes, it validates the updated object against the schema and if it isn't valid prevents the update and throws an exception.

I'm thinking through constraints and options at the moment.