OGM-454 Package re-organization for hibernate-ogm-core

This organizes the core module into API, SPI and internal packages. The major changes are:

* Many internal types moved to "impl" packages
* Many SPI types moved to "spi" packages
* Some implementation types have been moved to "spi"; These were used in dialects and I felt we can commit to these contracts basically.

When reviewing, please check  the contents of the API and SPI packages carefully. If there is anything which should not be in there or arranged in another way, let me know. One thing I'm wondering is, should we keep the distinction of `dialect.spi` and `grid.spi`. Both are close related and could IMO be merged.

Note that there are still references from dialects to core implementation classes because these are things where we should not yet commit on any SPIs IMO. Below is the full list (If you think anything from the referenced stuff should be "spi" also let me know).

Thanks for any feedback!

References to impl classes from dialects:

~~~
#### CouchDB
   o.h.o.datastore.couchdb.CouchDBDialect -> o.h.o.type.impl.Iso8601StringCalendarType
   o.h.o.datastore.couchdb.CouchDBDialect -> o.h.o.type.impl.Iso8601StringDateType
   o.h.o.datastore.couchdb.dialect.backend.json.impl.SequenceDocument -> o.h.o.util.impl.CollectionHelper
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBBlobType -> o.h.o.type.descriptor.impl.GridTypeDescriptor
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBBlobType -> o.h.o.type.descriptor.impl.StringMappedGridTypeDescriptor
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBBlobType -> o.h.o.type.impl.AbstractGenericBasicType
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBByteType -> o.h.o.type.descriptor.impl.GridTypeDescriptor
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBByteType -> o.h.o.type.descriptor.impl.WrappedGridTypeDescriptor
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBByteType -> o.h.o.type.impl.AbstractGenericBasicType
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBLongType -> o.h.o.type.descriptor.impl.GridTypeDescriptor
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBLongType -> o.h.o.type.descriptor.impl.StringMappedGridTypeDescriptor
   o.h.o.datastore.couchdb.dialect.type.impl.CouchDBLongType -> o.h.o.type.impl.AbstractGenericBasicType
   o.h.o.datastore.couchdb.logging.impl.Log -> o.h.o.util.impl.Log
   o.h.o.datastore.couchdb.logging.impl.Log_$logger -> o.h.o.util.impl.Log
#### Ehcache
   o.h.o.datastore.ehcache.EhcacheDialect -> o.h.o.datastore.map.impl.MapHelpers
   o.h.o.datastore.ehcache.EhcacheDialect -> o.h.o.datastore.map.impl.MapTupleSnapshot
   o.h.o.datastore.ehcache.dialect.impl.SerializableMapAssociationSnapshot -> o.h.o.datastore.map.impl.MapTupleSnapshot
#### Infinispan
   o.h.o.datastore.infinispan.InfinispanDialect -> o.h.o.datastore.map.impl.MapAssociationSnapshot
   o.h.o.datastore.infinispan.InfinispanDialect -> o.h.o.datastore.map.impl.MapHelpers
   o.h.o.datastore.infinispan.dialect.impl.InfinispanPessimisticWriteLockingStrategy -> o.h.o.persister.impl.EntityKeyBuilder
   o.h.o.datastore.infinispan.dialect.impl.InfinispanPessimisticWriteLockingStrategy -> o.h.o.util.impl.Log
   o.h.o.datastore.infinispan.dialect.impl.InfinispanPessimisticWriteLockingStrategy -> o.h.o.util.impl.LoggerFactory
   o.h.o.datastore.infinispan.impl.InfinispanDatastoreProvider -> o.h.o.util.impl.Log
   o.h.o.datastore.infinispan.impl.InfinispanDatastoreProvider -> o.h.o.util.impl.LoggerFactory
   o.h.o.datastore.infinispan.impl.configuration.InfinispanConfiguration -> o.h.o.util.impl.Log
   o.h.o.datastore.infinispan.impl.configuration.InfinispanConfiguration -> o.h.o.util.impl.LoggerFactory
#### MongoDB
   o.h.o.datastore.mongodb.MongoDBDialect -> o.h.o.datastore.map.impl.MapTupleSnapshot
   o.h.o.datastore.mongodb.MongoDBDialect -> o.h.o.type.impl.StringCalendarDateType
   o.h.o.datastore.mongodb.MongoDBDialect -> o.h.o.util.impl.CollectionHelper
   o.h.o.datastore.mongodb.logging.impl.Log -> o.h.o.util.impl.Log
   o.h.o.datastore.mongodb.logging.impl.Log_$logger -> o.h.o.util.impl.Log
   o.h.o.datastore.mongodb.options.navigation.impl.MongoDBEntityContextImpl -> o.h.o.util.impl.Contracts
   o.h.o.datastore.mongodb.options.navigation.impl.MongoDBGlobalContextImpl -> o.h.o.util.impl.Contracts
   o.h.o.datastore.mongodb.options.navigation.impl.MongoDBPropertyContextImpl -> o.h.o.util.impl.Contracts
   o.h.o.datastore.mongodb.query.parsing.impl.MongoDBBasedQueryParserService -> o.h.o.service.impl.SessionFactoryEntityNamesResolver
   o.h.o.datastore.mongodb.query.parsing.predicate.impl.MongoDBLikePredicate -> o.h.o.util.parser.impl.LikeExpressionToRegExpConverter
   o.h.o.datastore.mongodb.type.impl.ByteStringType -> o.h.o.type.descriptor.impl.GridTypeDescriptor
   o.h.o.datastore.mongodb.type.impl.ByteStringType -> o.h.o.type.descriptor.impl.StringMappedGridTypeDescriptor
   o.h.o.datastore.mongodb.type.impl.ByteStringType -> o.h.o.type.impl.AbstractGenericBasicType
#### Neo4j
   o.h.o.datastore.neo4j.dialect.impl.MapsTupleIterator -> o.h.o.datastore.map.impl.MapTupleSnapshot
   o.h.o.datastore.neo4j.dialect.impl.Neo4jTypeConverter -> o.h.o.type.impl.StringCalendarDateType
   o.h.o.datastore.neo4j.dialect.impl.Neo4jTypeConverter -> o.h.o.type.impl.StringDateTypeDescriptor
   o.h.o.datastore.neo4j.logging.impl.Log -> o.h.o.util.impl.Log
   o.h.o.datastore.neo4j.logging.impl.Log_$logger -> o.h.o.util.impl.Log
   o.h.o.datastore.neo4j.query.parsing.cypherdsl.impl.CypherDSL -> o.h.o.util.impl.Contracts
   o.h.o.datastore.neo4j.query.parsing.impl.Neo4jBasedQueryParserService -> o.h.o.service.impl.SessionFactoryEntityNamesResolver
   o.h.o.datastore.neo4j.query.parsing.impl.Neo4jBasedQueryParserService -> o.h.o.util.impl.Log
   o.h.o.datastore.neo4j.query.parsing.impl.Neo4jBasedQueryParserService -> o.h.o.util.impl.LoggerFactory
   o.h.o.datastore.neo4j.query.parsing.impl.predicate.impl.Neo4jLikePredicate -> o.h.o.util.parser.impl.LikeExpressionToRegExpConverter

For Infinispan, it seems it's to access `OgmEntityPersister.getRootEntityKeyMetadata()` we could create an interface SPI hosting this.

I don't know how to access any column name from the `EntityPersister` but you can do `Lockable.getVersionColumnName()`. Would that be sufficient?

For the query, getting the `GridType` if that's what you are looking for could be a contract of the interface I mentioned above.

So yes let's keep it in impl and build the necessary contract in a dedicated interface (new issue).