Build: Clean up Gruntfile

* general: Use strings instead of arrays where possible.
* jshint: Use 'true' instead of hardcoding jshintrc. Saves duplication
  and will make a config file in a subdirectory like src/ or test/
  work as expected.
* jshint: Merge test/dist patterns.
* jshint: Merge the different tasks into one 'all' task.
* jshint: Use "*.js" instead of "Gruntfile.js".
* jshint: Add build/.
* watch: Include build/.
* watch: Remove .* pattern (unused).
Assert: Implement Assert constructor with test context

For backwards compatibility, `QUnit.push` still works, though `assert.push`
should be used instead. Functions assigned to `QUnit.assert` are now added
to the `Assert` prototype and should use `this.push` instead of `QUnit.push`.

Fixes #374
Closes #588
Build: Adds browserstack.json

Configuration for https://github.com/browserstack/browserstack-runner
Requires BROWSERSTACK_USERNAME and BROWSERSTACK_KEY env vars to be set.
Will look into Travis integration later.

Closes #601
Core: Removed obsolte JSHint setting, was for a Grunt 0.3.x workaround

Closes #602
Build: Update license

Closes gh-580
Throws: support for oldIE native Error types

Fixes #547.
Core: Improve logging callbacks

- Remove deprecated support for overwriting logging callbacks
- Remove scope param from runLoggingCallbacks
Reporter: Move HTML reporter to a new JS file

- Removes QUnit.init and deprecated QUnit.reset
- Extends QUnit.extend to accept a `undefOnly` parameter,
  so we can check if it's needed to extend only unset/undefined properties
- HTML Logging is now related to each assertion through QUnit.log
- Now it logs exactly on the assertion's related test, without leaking. Ref #583
- The HTML reporter was refactored and improved. Ref #603
Core: Remove QUnit.* undocumented reporter methods

Undocumented internal methods QUnit.id, QUnit.addEvent, QUnit.addClass,
QUnit.hasClass, and QUnit.removeClass were removed.
Core: Register logging callbacks on config.callbacks
Tests: Remove after-done tests

The undocumented feature that re-opened the test suite for the html reporter,
when adding more assertions after test suite has finished running tests,
was removed. This only worked in the html reporter.

The callback interface never supported this properly and reporters such as
node-qunit, grunt-contrib-qunit and TestSwam never supported this either.

If this causes trouble, be sure to verify QUnit does not start until after
your tests are loaded (maybe using config.autostart).
Build: Detach jsDiff and HTML Reporter from QUnit

They're still built together anyway, but this allows us to make a special
build for QUnit to report on console only
test: Clean up assert.throws tests

* Consistently pass a message.
* Use a simple Error instance for the regex test instead of
  CustomError.
* Move the assertion where expected is an object higher up.
Assert: Add support for throws expecting any arbitary object

Including plain objects or instances of custom constructors that
didn't inherit from Error.

Fixes #609
Ref jquery/api.qunitjs.com#59
Package.json: Updates grunt-qunit-istanbul
Build: Ignores coverage on external modules
Src: Export Assert methods for backwards compatibility
Test: Check for exported assertions
Reporter: Reimplements deprecated QUnit.init

Closes #530
Reporter: Reimplements QUnit.reset()

QUnit.reset() should be removed on 2.0/2.1

Ref #453