feat(ngRoute): allow cancelling $route updates via $routeChangeEvent

Previously, one could perform this feat by listening to both
$locationChangeStart as well as $routeChangeStart, and being careful to
update the route correctly. Now, it's possible to simply preventDefault()
on the
$beforeRouteChange event in order to prevent location and route from being
updated.

While this does not cancel $routeChangeStart, it does ensure that the
correct location is restored, and provides the same information as
$routeChangeStart.

Closes #5855
Closes #5714
Closes #5581