Thread safe callback handling

We use ConcurrentHashMap from the java.util.concurrent package, which
like the java.util.concurrent.atomic classes from the original
implementation does not use locking.

To hold the callbacks in the ServiceCallbackList we also use a
ConCurrentHashMap. This is because there is no ConcurrentList or
ConcurrentSet and Collections.newSetFromMap is not available before
api level 9.

The semantics of the ConcurrentHashMap seems adequate because whether
an activity gets the response/notification, if it comes in  when
resuming/pausing is arbitrary whether or not we use locking. Since
registration and unregistration happens from the same thread, all a
clients callbacks will be safely unregisted when the activity or
fragment is paused.