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