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.
@jzaefferer: QUnit.assert is inexistent.

Now we have a QUnit.Assert that contains the Assert object for itself, and you can directly add methods to its prototype, using `QUnit.Assert.prototype`. 

Even though, this doesn't prevent us from creating a QUnit.addAssertion() and not exposing the Assert object.

---

@Krinkle: I prefer to move start/stop in another PR, for easier reviews. The context is still fragile but it is better than before.