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
java uses Type Erasure, which means generics are only available at compile time and are erased prior to runtime (no difference between HashSet<Integer> and HashSet<String> at runtime).

our usage of Class<T> is to perform runtime checking to reduce unchecked casts as much as possible.

Supposedly it is possible to get the generic type information for objects using reflection at runtime, but that would complicate the code for internal meta-data and I think we would still need to do "unchecked" casts from the compilers point of view.

I'm opting for documenting that the *ImplMeta() methods as intended for internal use only.

see: http://stackoverflow.com/questions/1942644/get-generic-type-of-java-util-list