feat(reporter): use spaces rather than tabs when formatting errors
feat(preprocessor): allow preprocessor to cancel test run

Now a preprocessor can return an error, which
  - stops preprocessing (does not trigger other preprocessors),
  - cancels the test run.

This changes the preprocessor API - preprocessor's `done` function accepts two arguments:
  - an error (`null` if no error),
  - content.

The change is done in a backwards compatible way - if a preprocessor calls `done` with a single
string argument, it is treated as no error.

Closes #550