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.