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
not that I know of off the top of my head, I wasn't too happy about needing that, but figured I'd let it slide because the objectClass HashSet is definitely an internal implementation detail and if people start mucking around with it outside of this class they deserve to have random Exceptions ;)

I'm working on another PR at the moment but will try and clean this up a bit if possible (whether through correctly handling the generics or through documenting that you shouldn't be touching getImplMeta/setImplMeta)