Replacing IdentityHashMap in RecordTemplate, WrappingMapTemplate and WrappingArrayTemplate with a custom cache

Making the cache package protected.

Removed type check inside the internal DataObjectKey.equals method.

Revert back to hash code object instance based approach as a result of performance test.

Create data complex hash code at construction as it does not have visible performance difference than creating an object.

Removing unnecesarry imports from DataList and DataMap.

Make Random object a local variable when initializing the thread local counter.

Adding Unit tests, more comments and minor method naming fixes.

Fix indentation in DataComplexHashCode class.

Added change log.