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.

@thomasdarimont unfortunately not all of the expressions we create can be compiled. But it seems as if we still could make use of them for sorting. Have a look at 3087add. Maybe there's a way to solve the compilation issues - So still some work to do.