[jvstm-infinispan] Aquire global lock on read-write commit

  * Create ClusterUtils
  * Create ClusteredPersistentTransaction to extend PersistentTransaction with
    cluster-aware behavior (for now: locking)
  * Update transaction factory definition in JvstmIspnBackend
Move all cluster-related code to ClusterUtils class
[jvstm-ispn] Send commit information to other nodes and apply
[jvstm-ispn] Ignore self commits when dealing with remote commits. Expose a bug

  * The thread the receives the remote commit message may get delayed thus not
    delivering the message in time. As such, a committing transaction may not
    realize that another node has already committed.  It will then use an
    already taken commit version.
[jvstm-ispn] Reimplement global lock with AtomicNumber. Revise remote commits workflow.
[jvstm-ispn] Use tryLock instead of lock when starting a transaction
[jvstm-ispn] Adjust Infinispan configuration to improve performance

  * useSynchronization(true)
  * deadlockDetection().enable()
[jvstm-common] Remove system.exit with a persistence exception occurs and just throw TransactionError
[jvstm-ispn] Add debug logs to RemoteCommit
[jvstm-ispn] Create SpeculativeRemoteCommit before locking
[jvstm-ispn] Use the same ISPN cache for system data and domain data

  * This should reduce the number of messages exchanged between nodes, as each
    cache use a different PREPARE_COMMIT message (among others).
[jvstm-ispn] Minor update: code cleanup; add assertion
[jvstm-ispn] Do not force any clustered ISPN configuration
[infinispan] Optimization: Ignore put return value (not needed)