test(driver-compat) add spec for BasicBSONDecoder
feat(driver) add mapReduce command and corresponding classes

Following changes done:
- classes added o.m.command.MapReduce, o.m.command.MapReduceCommandResult, o.m.command.MapReduceCommandResultCodec, o.m.operation.MapReduce, o.m.operation.MapReduceOutput
- tests added unit/o.m.command.MapReduceCommandSpecification
- changed DocumentCodec.readValue to be 'protected'
feat(driver-compat) implement mapReduce on top of org.mongodb.command classes
fix(driver-compat) return MapReduceOutput(DBCollection, DBObject, CommandResult) constructor
style(driver-compat) 'toNew()' is package-private and remove 'static' from enum declaration
refactor(driver) extract reading array into separate method and add specification
docs(driver) add documentation to map/reduce classes
docs(driver) update javadoc on org.mongodb.operation.{MapReduce, MapReduceOutput}
refactor(driver, driver-compat) split MapReduceCommandResult into 2 classes
chore(*) update copyright for the whole codebase
Changed all the setup: tags to given: tags, so now most tests should read given-when-then
Made all the mocking tests order-dependent, as they should care about the order the things get called in
Merge branch 'spock-update' into 3.0.x
Completed mapping of com.mongodb.MongoException to org.mongodb.MongoException.  Added cases for additional com exceptions that need to be thrown, and added test for the mapper.  Also made sure the new org exception is not visible in the stack trace.
Removed unnecessary Exception field
Added missing 2.x Exceptions and the mappings for them.
Refactored com Exceptions to take new exceptions in the constructors for ease of conversion.
Added missing MongoInterruptedException
Implemented Vova's excellent suggestion of turning MongoExceptionsSpecification into a data-driven test
fix(driver-compat): add rule for encoding Character and final modifier in BSONObjectEncoder