Command method refactoring

Summary of changes:

 * Command methods now throw ResultException on error.
 * `group()` now returns an ArrayIterator of its actual results -- not the full command response. See #125 for an outstanding feature so ArrayIterator can ultimately include the full command response, too.
 * Ensure all `mapReduce()` options are prepared as MongoCode objects (where applicable)
 * Handle external database output for `mapReduce()`.