TestResult may not be modified any longer after it's been added to a parent.
Test methods can only access the InvocationContext.
Replace ITestLogger with an abstract TestLogger class.
Capture and post to current SynchronizationContext.
Always allow TestResult.Clear().
Start to transition towards using InvocationContext.
Use InvocationContext everywhere.
Cleanup.
Cleanup.
Renamed TestApp -> UITestApp.
Renamed TestContext -> TestApp.
Renamed InvocationContext -> TestContext.
Refactoring done.

* The old TestContext has been renamed into TestApp because it's really
  a per-app singleton class.

* We now use the InvocationContext - which has been renamed into TestContext -
  everywhere, which is created per test method invocation and is also thread-safe.

The goal is to allow the test methods to run on multiple threads.
Fix it.
TestParameterSource<T>'s return value may now implement ITestFilter.
Add [Fork] and IFork.

Use like this:

	[AsyncTest]
	public async Task TestFork (TestContext ctx, [Fork (5, RandomDelay = 1500)] IFork fork, CancellationToken cancellationToken)

this will create 5 parallel tasks for 'fork' and everything right of it, making this a "parallel repeat".