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

Do you want to name it `DefaultClassPropertyReaderContext`? We can go for this if you think it's better, although it suggests that there may be other implementations (which is not really the case as we only need the interface for SPI/impl separation).