CollectionWriter refactoring, bulk write exception result and emulation

RUBY-676

I like this refactoring, as it eliminates a significant number of conditionals, cutting many methods in half where there was a choice between the old write operations and the new write commands.  All of the complex write-related issues are now in collection_writer.rb, and collection.rb is again very clean.

Performance tests show that the refactoring (batch_write_incremental) has no loss of performance versus the old pre-refactored code (batch_write_incremental_old), it's essentially the same.  The following tests are run with max_write_batch_size 2 so that the refactoring is not amortized away by the default large batch size of 10,000.  With the default max_write_batch_size of 10_000, docs_per_cpu_sec is around 21608, and hopefully the server will catch up soon.

max_wire_version: 0 (old write operations)
    cpu_secs: 6.44, docs_per_cpu_sec: 7986, title: "batch_write_incremental huge", max_write_batch_size: 2
    cpu_secs: 6.48, docs_per_cpu_sec: 7936, title: "batch_write_incremental_old huge", max_write_batch_size: 2

max_wire_version: 2 (new write commands)
    cpu_secs: 8.56, docs_per_cpu_sec: 6008, title: "batch_write_incremental huge", max_write_batch_size: 2
    cpu_secs: 8.45, docs_per_cpu_sec: 6086, title: "batch_write_incremental_old huge", max_write_batch_size: 2

If you are interested, you can read the full set of current performance results and other working notes.

https://raw.github.com/gjmurakami-10gen/mongo-ruby-driver/1.x-stable-write-benchmarks/WriteOperations.md

Additional commit adds bulk exception result and emulation with old write operations.  BulkWriteCollectionView#execute now has an example of catch/throw, refactoring ideas are welcome.