CXX-179 Support read preference for commands

The idea here is to make minimal changes to the way the existing driver works in order to support passing a read preference to commands by having them take a Query object (upon which read preferences can be piggybacked) instead of a BSONObj.
We get back an empty one:

{code:cpp}
    inline BSONObj BSONObj::getObjectField(const StringData& name) const {
        BSONElement e = getField(name);
        BSONType t = e.type();
        return t == Object || t == Array ? e.embeddedObject() : BSONObj();
    }
{code}