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

If you want to know, OSGi would load the class annotated with `@AssociationStorage` but the loading of the annotation declaration would fail and thus the class would not have `@AssociationStorage` exposed by reflection. 
So Hibernate OGm would not apply the storage overloading.

I hate modularity crap