Fix infinite digest loop 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 event 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 changes and synchs $location's inner data, while the other watches for changes in $location.absUrl() and synchs them to $browser. They end up reversing each other's changes until Angular cuts them off.

Closes #3814