ISPN-2824 Add support for JSR-107 Cache.invokeEntryProcessor()

* It uses an optimistic method based around reference copying and
conditional, CAS-like, cache operations to provide perceived exclusive
data access.
* It also adds per-key locking for when keys are used by the entry
processor in order to necessary delays to operations.
* To avoid affecting performance of normal CRUD cache operations,
it checks whether a key is locked before trying to acquire the lock
for it. If it's locked, it means it's in use by an entry processor.