Fix: initInstance hierarchy

  * This problem was detected after adding DomainBPlusTree.  Problem: there
    was a bug in the invocation of LeafNode.setEntries() from the constructor
    of LeadNode. When actually creating an instance of DomainLeafNode, it
    would invoke the override DomainLeafNode.setEntries(), which would attempt
    to access a yet uninitialized slot (domainEntries).  The solution is to
    change how initInstance happens by invoking it only once from the
    top-level AbstractDomainObject class, instead of invoking it once per
    class hierarchy level.
Merge pull request #142 from smmf/fix/initInstance

Fix: initInstance hierarchy
[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)
Merge pull request #147 from smmf/feature/jvstm-clustered

Feature/jvstm clustered
[DomainBPlusTree] New Feature: Created a new subclass of the
DomainBPlusTree that uses JVSTM's PerTxBoxes to implement an
optimization to calculate the size() of a tree, which is now O(1)
[Consistency Predicates] Minor Change: Used the new optimized
DomainBPlusTreeJVSTM in the relation between the DomainMetaClass and the
existing DomainMetaObjects
Create backend jvstm-cluster

This backend implements the concept of a clustered JVSTM.  It extends from
jvstm-common.  Transactions are local to each node, but commits are
synchronized across all nodes.  For the moment, this will contain a (global)
lock-based commit implementation.
[jvstm-cluster] Extract cluster-related code from jvstm-ispn

Later, we'll implement here the support for a VBox cache.