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

`GridDialect` uses 'Consumer' to process all the tuple corresponding to some `EntityKeyMetadata` in `GridDialect#forEachTuple(...)`. We are using it for the mass-indexing.

It seams to make sense to have it in spi. Why/How would you move it in the impl interface?