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
Utilizing method visibility to restrict access would be nice, but different packages and no inheritance means no quick visibility changes to restrict it.

You could work around this using some visibility package hacks (private class that extends class you want access to protected methods from or helper class in package that reveals package local visibility members, both would then wrap the protected methods in a static wrapper method).
Or you could change visibility at runtime using reflection.

Again, not worth the overhead/hassle.