Added support for $geoWithin

Now, mongoose will check the version of the database and use $within or
$geoWithin appropriately based off of what version of the db is running.
Tests have also been updated to reflect this.
fixes an issue with _findAndModify not return null on upserts
bumped mquery version
Fixed tests to use intersect() instead of insersect

Mquery is not compatible with the old syntax.
Fixed issue with .distinct() args not being passed properly

Mquery and Mongoose have different arg orders for .distinct() this patch
fixes it such that things will behave appropriately when passed to
mquery in certain cases.
geoSearch updated to return an error in appropriate situations

This is mainly a workaround for a driver error that has been patched in
a future release. The driver was not checking the results it got back
from geoSearch and just passing the results straight back instead of
creating an error and passing that back.
Removed version detection on geoWithin

This now defaults to geoWithin and must be explicitly set by the user if
they want to use $within
added some document on the _map reduce param
ensure that _mongooseOptions is its own object
changed location of options/fields vars in find to prevent race condition
fixed a possible double-callback scenario in update
Update docs/comments, changed the use$geoWithin to be an alias of
mquery's

and updated tests to use the property appropriately
mongoose.Query now points to MongooseQuery
made the error code a property on error for geoSearch
Updated mquery version & fixed up tests for select()

readPreference tests are failing though because of instaceof conflicts