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

We use `OgmEntityPersister` several times in dialects:

* CouchDB: `getPropertyColumnNames()` is invoked to check during start-up whether each entity has a "_rev" property for optimistic locking
* Infinispan: Locking as you say
* MongoDB, Neo4j: Property type conversion during query handling

I can move it back and we live with these impl usages for now and look for a suitable abstraction exposed to dialects later on. WDYT?