Guarding against temporary inability to determine the server version in tests.
Fixed a number of aggregation bugs.  First is to have DBCollection use a proper DBObject decode for the results.  Getting this to work, though, required fixing CommandResultWithPayloadDecoder to handle the nested "firstBatch" key.  Also created a separate AggregateToCollectionOperation, which is a WriteOperation, for use when the pipeline contains a $out.  Otherwise, the read preference in AggregateOperation would get applied and it could be sent to a secondary.