OGM-646 Add test for unidirectional @OneToMany
OGM-646 Fix NullPointerException in MongoDB for unidrectional one-to-many
OGM-645 Converting meta-data types into interfaces
OGM-642 Adding test; Using JBoss Logging for creation of exception
OGM-642 Performing read before inserts only if required as per the datastore's capabilities;

* Adding new method GridDialect#getDuplicateInsertPreventionStrategy() for letting dialects configure their duplicate prevention strategy
* Doing the read in OgmEntityPersister#insert() only in case the strategy is LOOK_UP
OGM-642 Using strategy NATIVE for MongoDB
OGM-642 Using strategy NATIVE for CouchDB
OGM-642 Using NATIVE strategy for Neo4j
OGM-642 Making duplicate id detection strategy configurable per entity type;

* Passing EntityKeyMetadata to getDuplicateInsertPreventionStrategy()
* For Neo4j use NATIVE for non-compound keys, LOOK_UP otherwise as unique keys can only be added to single properties
OGM-642 Using NATIVE strategy for Ehcache
OGM-642 Addressing review remarks
OGM-647 Raising EntityExistsException if duplicated entity is inserted
Minor improvement describing why we cache cache lookups
OGM-452 Externalize the cache and key computation for Infinispan
OGM-452 Use generics for the cache key types
OGM-452 Limiting usage of CacheAndKeyProvider to InfinispanDialect only (there we can inject the required meta-data as obtained from the SF)
OGM-452 Extracting LocalCacheManager contract from CacheAndKeyProvider;

* Moving management of caches to LocalCacheManager; Sub-classes are in charge of returning the right cache for a given entity type
* Triggering cache initialization via SchemaDefiner contract which provides access to all required tables
OGM-452 Renaming KeyProvider contract
OGM-452 Moving classes specific to strategy "per kind" to the right package
OGM-452 Avoiding knowledge about cache names in LocalCacheManager