JCache improved concurrency of CacheManager and CacheProvider impls

CacheManager and CacheProvider removed sync
CacheRecordStore improved checkstyle
CacheStatistics added to ICache and impl for server mode
I think there is another data-race:

```
if (cacheManagersByURI.size() == 0) {
cacheManagers.remove(managerClassLoader);
}
```

Again it is the non atomic check/modify. It could be that a cache was created after the size()==0 succeeded, but before the cacheManagers.remove(maangerClassLoader) is done. So now this newly created cacheManager gets deleted from the cacheManager, but it isn't following the regular close process. 

Perhaps the simplest way to solve this problem is the acquire a (striped lock). Another way would be to use immutable data-structures, although that would be a bit more complicated.