chore(grunt): update to latest jshint task

Upgrade JSHint task from ~0.6.4 to ~0.7.2. Two useful changes: ability
to set jshintrc option to use jshint's native ability for finding .jshintrc
files relative to the linted files and update jshint to 2.3.0.

Closes #5143
chore(travis): use only websockets and xhr-polling

I wanna see more info about BrowserStack...
chore(travis): tolerate 2 disconnects to make the build more stable
chore(deps): use regular junit-reporter

We don't need the special branch anymore.
chore: use karma-browserstack-launcher from master
chore(travis): fix the build id on browser stack

This just improves the way BrowserStack groups the sessions.
docs: update CONTRIBUTING.MD with process for doc fixes
chore(travis): ignore 404 warnings, debug log into file

This is a terrible hack/workaround, however I don't think there is any better way to achieve this
with log4js.
chore(travis): increase BrowserStack timeout to 10min

Because IE is retarded.
fix($sanitize): don't rely on YARR regex engine executing immediately

In Safari 7 (and other browsers potentially using the latest YARR JIT library)
regular expressions are not always executed immediately that they are called.
The regex is only evaluated (lazily) when you first access properties on the `matches`
result object returned from the regex call.

In the case of `decodeEntities()`, we were updating this returned object, `parts[0] = ''`,
before accessing it, `if (parts[2])', and so our change was overwritten by the result
of executing the regex.

The solution here is not to modify the match result object at all. We only need to make use
of the three match results directly in code.

Developers should be aware, in the future, when using regex, to read from the result object
before making modifications to it.

There is no additional test committed here, because when run against Safari 7, this
bug caused numerous specs to fail, which are all fixed by this commit.

Closes #5193
Closes #5192