CSHARP-798: Prototype public API of supporting Aggregate command with cursors.
CSHARP-798: Added AllowDiskUsage to MongoAggregateOptions.
CSHARP-800: Add support for aggregate command with $out.
CSHARP-798: Added new AggregateQuery method that behaves more like a query and delays sending the command to the server until the results are enumerated.
CSHARP-798. Initial implementation finished and all unit tests pass, including new unit tests for aggregate with a cursor and with $out.
CSHARP-798: Execute AggregateQuery immediately if $out is used. Remove FirstBatch property from AggregateResult and overload ResultDocuments to also hold the first batch when using a cursor. Add new RunAggregateCommand helper method to MongoCollection and remove overload of Aggregate command that takes an options parameter (so if you want to use a cursor, which requires options, you have to use the new AggregateQuery method).
CSHARP-798: Give the user control over both the FirstBatchSize and the subsequent BatchSize when using AggregateQuery with a cursor. A FirstBatchSize of 0 instructs the server to just set up the cursor and return immediately with an empty first batch. FirstBatchSize defaults to BatchSize if not specified. If neither is specified the server picks the batch size.
CSHARP-798: Removing support for FirstBatchSize in response to code review comments. Leaving BatchSize nullable to avoid using a magic number.