Add support for `--dry-run` mode.

This addresses Issue #16.

I added a class, `DryRunRunner`, that will skip all steps and will report them as either skipped or undefined to the given `report` object.

I added a `options` parameter to `Core#execute`. This will default to using the `DefaultRunner` unless otherwise specified.

More test runners can be added by adding them to the `Runner::TEST_RUNNERS_LIST`

Example

    Runner::TEST_RUNNERS_LIST[:my_runner] = MyRunner

    #....

    execute(docs, mappings, report, filters, runner: my_runner) 

This will fail with an `ArgumentError` if there is no test runner found.