ISPN-4563 Create unit test to replicate concurrency issue

Change-Id: Id381cc57965b8520111ad5337c619d8d9b4e75aa
ISPN-4563 Fixed comparing configuration in JCacheManager
ISPN-4563 JCache createCache/getCache synchronized in cache resolver

* This applies only to the DefaultCacheResolver, which sticks to using
standard javax.cache mechanisms to find cache managers in the system.
As a result of this, the class limits itself to using purely
javax.cache APIs, which is why synchronization is required.
* This fix is not required for the InjectedCacheResolver because this
one is based around the fact that you're in an environment where you
are injecting Infinispan CacheManager instances, and hence the cache
resolver can wrap those with whatever it wants. In fact, it directly
uses JCacheManager concrete class, allowing it to call configureCache
method which really acts like a getOrCreate method in a safe way.
* The changes in DefaultCacheResolver are needed because
resolveCache() could be called concurrently, so given the limitations
of createCache/getCache, synchronization is needed to guarantee
correct behaviour.
* JCache API specifies that createCache() returns an exception if
the cache name is alreadyd defined. It would have been better for it
to return the Cache itself if present, since that way synchronization
would have been responsibility of the JCache provider.
ISPN-4563 Rename configureCache to getOrCreateCache in JCacheManager

* The new name better represents the conditional side of this method,
which is way more useful for JCache end users. Unfortunately, since
this method is currently only present in a concrete class, its
usability is a limited.
Change ReplicatedCHFactory to only replace leavers in updateMembers()

Uneven primary ownership should be dealt with in rebalance() only.
Delegate the isBalanced() check in DefaultRebalancePolicy to the CH factory

Allows waitForRehashToComplete() to work even if the CH factory allocated
less than numOwners owners to each segment.