DATAMONGO-912 - Consider custom conversions in all stages of an aggregation pipeline.

We now consider custom mongo conversions in all stages of an aggregation pipeline. Previously we did this only for the first stage and returned object basically unmapped in later stages. We now pass the root AggregationOperationContext on to nested ExposedFieldsAggregationOperationContexts so that those can delegate any mongo Mapping to the root context.

Original pull request: #170.
DATAMONGO-914 - Improve resolving of lazy-loading proxies for classes that override equals(…)/hashCode().

We now properly resolve lazy-loading proxies for @DBRef's when an overridden equals or hash code method is called with Spring 4. We fall back to our old Objenesis proxy generation in order to circumvent the default handling for overridden hashcCode() and equals(…) methods in CglibAopProxies generated by Spring 4.

If we detect that we run with Spring 4 we use the repacked Objenesis that is included in Spring 4. Previously the generated proxy used some generic hashCode() or equals(…) logic that did not trigger a proper lazy loading in such cases.

Original pull request: #171.
DATAMONGO-847 - Allow usage of Criteria in Update.

Prepare issue branch.
DATAMONGO-847 - Allow usage of Query for Update $pull.

In case we detect `Query` within a value used for an `Update` value we map the query itself to build the expression to use. This allows to form query statements for eg. `$pull` using the same API as for the query itself. 

Update update = new Update().pull("list", query(where("value").in("foo", "bar")));

Original Pull Request: #172