Implement Assert object constructor

This patch creates an instanced Assert object. The following characteristics:

- Exclusive to test blocks, `QUnit.assert` is now inexistent
- API `QUnit.push` is now `assert.custom`, it works on the test context.
- API `QUnit.pushFailure` is now `assert.failure`, it works on the test context.
- `assert.ok` is now equalized to other assertions and uses `Test.prototype.push` as well
- **We don't have test assertion leaks anymore (#583), although, we need to patch the reporter interface to run asynced**
 
Ref #583

@4852aa3 and @97c9a9c are here only for reference, they shouldn't be included in a merge.
I know that :) I'm merely arguing about the name of the variable. There is a test context (context of a test), and this is named like that but it isn't it.

Afaik it's common to refer to the associated/relational object simply by its type or purpose. The fact that it is the one relevant to the current "context" is implied.

I'd say it'll be clearer to have:

```js
var test = new Test();
// module provided environment like { setup: .., teardown: .. }
// execution context for the test callback function and setup/teardown functions
test.context;

var assert = new Assert(test);
assert.test instanceof Test

// Or maybe
assert.ownerTest instanceof Test
```