Feature stop run

This updates the framework API  to allow Stopping a test run. It also includes a lot of reorganization of classes, which will probably make it a bit tricky to review, especially since I started the work before my vacation trip and continued it after. I suggest looking at one commit at a time in that case.

Once this is merged, I believe the framework is ready for a 2.9.7 release. However, it's probably best not to merge it until the corresponding nunit-console pull request using the revised API is also ready to merge.
I'll clean them up. RunAsync doesn't return anything to test. It either succeeds or throws. The handler events are what tell the client what is happening with the run. I'll also rename these methods so it's clearer.