DATAMONGO-569 - Improved AbstractMongoConfiguration.

AbstractMongoConfiguration doesn't expose a Mongo instance anymore until you explicitly make it one by annotating the implementation method in the configuration sub lass with @Bean.

Removed the custom call to MongoMappingContext.initialize() as Spring call the lifecycle method for us anyway.
DATAMONGO-682 - Performance improvement for mapping hotspots.

This commit includes the MongoDB specific parts for the mapping subsystem performance improvements. Reworked PerformanceTest to output more reasonable numbers.

Heavily inspired by Patryk Wasik's contribution at https://github.com/SpringSource/spring-data-mongodb/pull/37.

GitHub PR: #37
DATAMONGO-677 - QueryMapper now handles DBRefs in Maps correctly.

QueryMapper now handle Map with DBRef value, which is needed to process an update in MongoTemplate.doUpdate(…) to save versioned document correctly.
DATAMONGO-679 - Fixed saving plain JSON strings in MongoTemplate.

MongoTemplate.doSave(…) didn't handle plain JSON strings correctly. It now correctly passes the marshaled object to the underlying method.
DATAMONGO-683 - QueryMapper now handles default ID names it mapping metadata missing.

Changed the implementation so that _id is considered an id field if no metadata is present. Heavily refactored QueryMapper internals so that the conversion code is more readable.
DATAMONGO-676 - SimpleMongoRepository now consistently uses EntityInformation.

SimpleMongoRepository.findOne(…) & ….delete(…) now use entityInformation.getCollectionName() to resolve the collection name to interact with. This allows global customizations of the collection name on repositories.
DATAMONGO-680, DATAMONGO-681 - Expose MongoOperations.exists(…).

We're now exposing dedicated exists(…) methods on MongoOperations which simply looks up a cursor and inspects it for the presence of at least one element. SimpleMongoRepository implementation now also uses this optimized exists check.