In the process of JBCACHE-843, it was discovered that Data Versions were not being replicated at all, except in the case of invalidations.

This is a serious oversight in the optimistic locking design, and has led to many issues especially class cast exceptions and on occasion
illegal state exceptions on the remote node.

The fix, while quite simple, has not explicitly designed in due to the oversight at the time.  For now (since 1.4.1) it is retro-fitted
but in future versions it may be redesigned to be better integrated.

In a nutshell, here is the fix:

* All TreeCache CRUD methods that are called by remote nodes (_put, _remove, etc.) will be overloaded to take a DataVersion param.
   * All these overloaded methods will simply pass the call back to the "real" method.
   * This mechanism is just used to pass the DataVersion to the remote node.
* TxInterceptor (in replayModifications()) will set the data version for each call replayed if a DV exists.
   * Remote calls will always be treated as explicitly versioned.
* The OptimisticReplicationInterceptor, before replicating, will translate all method calls to their overloaded counterparts.
  * DataVersions can be retrieved from the workspace nodes in memory.
  * If versioning is explicit, the new version is simply passed in.
  * If versioning is implicit, the version is cloned, incremented and passed in.

 