Summary: TestSuite should pass the test case to setup/teardown. This allows setup to associate state with the test case itself, instead of with the `window` object or within the scope of the `test()` function. This should be done for both AsyncTestSuite and SyncTestSuite.
<rdar://problem/29204593>
Setup/teardown could just use `this` to access test case state. There are only two issues with this approach, and they both seem pretty far fetched: 1) Using `this` in arrow function for setup/teardown will bind to something other than the test case. Setup/teardown are usually inline, and if they need to be defined elsewhere (for reuse in multiple tests), a regular named function will work. 2) However unlikely, the test case itself could trample state that was created during setup.