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
I suppose a caller to `update(user)` could unintentionally remove all cruPerson attributes if they only wanted to update other attributes on an existing `User` object and they passed in a `User`  without any cruPerson attributes (even though the underlying entry did indeed have cruPerson attributes therein).