fix($browser, $location): prevent url() from triggering onUrlChange()

On Android 2.2 and 2.3, infinite digest loops are occasionally triggered by
changing $location.path()

The problem is caused by a faulty assumption in $browser.onUrlChange(). The
assumption is that the hashchange event will only fire as a result of
non-Angular actions, e.g. a human editing the browser's url. Unfortunately in
Android 2.2 and 2.3, this occasionally fires when browser.url() changes the url.

The knock-on effect is a race condition between $location's two monitoring
loops: one watches for manual browser url changes using $browser.onUrlChange and
updates $location's inner data, while the other ($locationWatch) watches for
changes in $location.absUrl() and synchs them to $browser. They end up reversing
each other's changes in a vicious cycle until Angular cuts them off.