Remove optional fields from Builder::$query array

These are not accessed in Query unless the query type is appropriate, and the initializer methods for those query types already create the expected fields.
Fix preparation of group "cond" option in Query::execute()
Rename Query::DISTINCT_FIELD to DISTINCT

Also renamed the option, which is set in the query array.
Throw exception for invalid query types in Query constructor
Refactor Query execution and Builder array structure

Builder now initializes a much smaller array, which only contains the default type. The array structure will grow as methods are called. In turn, Query only expects the "type", "query", and possibly "newObj" fields to exist. All others are checked for existence before access.

geoNear options were moved into an "options" array, which is now consistent with mapReduce and group.
Query should allow a single cursor hint to be specified

Builder::hint() is only useful for setting a cursor hint (not related to ODM's UnitOfWork hints), so there is no reason to track multiple calls and apply them all to the cursor in Query::prepareCursor().