Query::execute() should use a copy of the $options property

The Query object is immutable, so this shouldn't make a difference in practice.
Refactor Builder::sort() to not use recursion
Do not filter out falsey values in Query/Builder debug() methods
Query::debug() should access the entire $query property

This will require changes to ODM, as several of its tests expect this to access only $query['query'] contents.
Support values and expressions for $pull in query builder

Note: $pullAll only supports an array of values (no expressions), so it remains as-is.
Rename argument for Expr pullAll/pushAll methods
Remove recursive merging in Expr::addManyToSet()

The recursive merging in addManyToSet() dates back to: doctrine/mongodb-odm@59a2da0bf7a53075f9d93b9b1327abccf561c1d1. This could be problematic if addManyToSet() was called multiple times with deep array values, as they could be merged together in PHP. The new behavior will just overwrite the existing value in $newObj, like other update operators.
Implement Expr::each() and allow it to be used with addToSet()
Deprecate Expr::addManyToSet() in favor of addToSet() and each()
Support $each/$slice/$sort operators with push()

MongoDB 2.4 deprecates the $pushAll operator in favor of $push with $each. Additionally, it adds support for $slice and $sort (only in combination with $each).
Expr::push() should ensure $each operator appears first

If the $each operator does not appear first, the $push argument will be considered a single value to append to the array field.
Test array/Expr arguments for logical operators and elemMatch
Use casting and array type-hinting for method args

This changes the public API for in/notIn and removes the array cast in notIn (behavior change); however, the methods are now consistent.

Other methods that take a single scalar type can use casting to sanitize their input.
Formatting Builder method docs
Expr::where() need not alter the current field
Builder mapReduceOptions/out methods should require mapReduce command
Support GeoJSON in Builder::geoNear() and set spherical default

geoNear commands against 2dsphere indexes require the "spherical" option to be true, so we can infer its default based on whether or not the "near" option is GeoJSON (in both Builder and Collection).
Make query type equality checks consistent
Builder::map() should init full query array, default to inline output

This makes map() as functional as mapReduce(), apart from setting the "reduce" option.
Refactor Builder/Expr set() and add tests