POC - Feature: Repository abstraction for in-memory datastores.

**-- CAUTION --** This is a POC exploring potential of having support for in memory stores.

Basically we provide abstractions for `InMemoryOperations`. The abstraction allows putting any in memory implementation like plain `Map` underneath.  Support for EhCache has been done to have a second implementation to see if it works for more than one type.

So what this currently allows to derive queries for Map implementation using `SpEL` as well as `Criteria` based ones for EhCache. Both implementations are not finished and only support a subset of what's possible.

Using `@EnableInMemoryRepositories` can be used for repository creation. Defining `repositoryFactory` allows to use other than default `MapBackedRepositoryFactory` so one can easily switch eg. to `EhCacheBackedRepositoryFactory`.

Have a look at `GenericInMemoryRepositoryUnitTests` as a base and the concrete ones `MapRepositoryUnitTests` and `EhCacheRepositoryUnitTests` to get an impression.

I think those interface should be decomposed into 2 separate components, since IdGeneration and extracting the Id of an Object are IMHO two different things.
an IdGenerator - with only one method get/create/generateId(entity) and the other could be an IdResolver with the resolveId/readId method.