Implement VM coverage gathering (#1088)

Open to feedback on this. Here's how it works at the moment:

There's a new `--coverage` option that you can use to specify the output directory for your coverage. It will create a new output directory if one doesn't already exist.

The tests are run through the engine, and then get spit out to a coverage helper function. That coverage helper function:
**A)** Checks if it's a VM suite
**B)** Gathers coverage if it is
**C)** Outputs coverage to `${suite path}.vm.json`

So, for example, when I run:
```bash
pub run test --coverage hello_world test/vm/simple_repo_test.dart
```

A new file gets added at `hello_world/test/vm/simple_repo_test.dart.vm.json` with the coverage results!
14 files changed
tree: 13b158569c02fd24946f574cc29213488646a329
  1. pkgs/
  2. tool/
  3. .gitignore
  4. .travis.yml
  5. analysis_options.yaml
  6. CONTRIBUTING.md
  7. mono_repo.yaml
  8. README.md
README.md

Test Mono Repository

This repository contains packages for writing and running Dart tests.

test

A full featured packaged for writing and running Dart tests on various platforms, e.g. VM, Chrome, Node etc.

test_api

A minimal package for writing tests. This package is used by package:test and package:test_core.

test_core

A minimal package for writing and running tests. It also contains extensions for implementing a custom test runner. This package is used by package:test.