feat($route): ability to cancel $routeChangeStart event

Calling `preventDefault()` on a `$routeChangeStart` event will
prevent the route change and also call `preventDefault` on the `$locationChangeStart` event, which prevents the location change as well.

BREAKING CHANGE:

Order of events has changed.
Previously: `$locationChangeStart` -> `$locationChangeSuccess`
  -> `$routeChangeStart` -> `$routeChangeSuccess`

Now: `$locationChangeStart` -> `$routeChangeStart`
  -> `$locationChangeSuccess` ->  -> `$routeChangeSuccess`

Fixes #5581
Closes #5714
Closes #9502
refactor(formController): remove redundant methods from nullFormCtrl
docs(changelog): more release notes for 1.3.0-rc.5
docs(select): fix formatting of and placement of selectAs/trackAs explanation
refact($anchorScroll): use Array.some for better performance
fix($location): use clone of passed search() object

Fixes bug when $location.search() is not returning search part of current url.

Previously, the location's internal search object could be set by passing an object to the search()
method. Subsequent changes to the passed search object would be exposed when requesting the search
object, but those changes would not appear in the composed url.

Now, the object is cloned, so the result of location.search() should match the contents of
location.absUrl(), provided the object returned from location.search() is not changed.

Closes #9445
style(filters) use consistent quote style and strict equality

before change quotes where mixed and one if contained equality operator instead of identity

Closes #9349
WIP - feat($anchorScroll): add support for configurable scroll offset

Add support for a configurable scroll offset to $anchorScrollProvider.
The offset is expressed in pixels and can be specified either as a fixed
value or as a function that return the offset it pixels dynamically.
(This is a POC and a WIP: no docs, no tests)

Related to #9368

Closes #2070, #9360
ANCHOR SCROLL: WIP - feat($anchorScroll): add support for configurable
scroll offset

Updated the docs and implemented the dynamic scroll offset in the docs app
in a more proper way (introduced the `scrollOffset` module as well).
There seems to be an issue with the current implementation, as
`window.scrollBy()` does not work when the "scrolled" element is lower in
the DOM hierarchy.
ANCHOR SCROLL: WIP - feat($anchorScroll): add support for configurable
scroll offset

Fixed the dynamic scroll offset example in the docs.
ANCHOR SCROLL: WIP - feat($anchorScroll): add support for configurable
scroll offset

Updated the `scrollTo` function to prevent elements near the bottom of
the scrolled element to be scrolled further down than required.
WIP: simplify $anchorScroll offset feature
test($anchorScroll): add missing `scrollBy` spy to the mock window
WIP - feat($anchorScroll): add support for configurable scroll offset

Finalize the implementation, fix scrolling for elements near the end of
the page, make sure the values calculated for top-offset and height are
accurate (and unaffected by box-sizing or offset-parents), add fallback
for IE8's lack of `getComputedStyle()`.
Also, remove two redundant calls to `$anchorScroll()` from the docs'
examples.
There still needs to be docs and tests.
WIP - docs($anchorScroll): update the docs and examples

Separately document $anchorScrollProvider, document the newly added
`yOffset` property of $anchorScroll, fix minor issues in the examples and
overall improve the docs.
test($anchorScroll.yOffset): add tests for $anchorScroll.yOffset

Add tests for `$anchorScroll.yOffset` and make some necessary
modifications to the existing test helper functions.
(Also, refactor the $anchorScroll code to get rid of IE8-specific stuff
and simplify.)
fix($anchorScroll): fix scrolling with element as yOffset in Firefox, IE

Firefox and IE use the `<html>` element as the viewport, while Chrome uses
the `<body>`. This caused scrolling to not work correctly when an element
was set as `yOffset`. Using `window.pageYOffset` instead, seems to work
consistently across all supported browsers.
fix($anchorScroll): make sure scrolling takes place when `readyState === 'complete'`

When navigating to a page with a hash in the URL, Firefox and IE do their
native scrolling AFTER $anchorScroll, which cancels the applied `yOffset`.
Waiting for `document.readyState` to be 'complete' solves the problem in
Firefox.
(In IE, the issue still appears when navigating to a URL (with a hash),
but not when reloading the same URL.)

Note, that with or without this fix subsequent calls to `$anchorScroll()`
or changes to `$location.hash()` work as expected in all supported
browsers.
test($anchorScroll): add tests regarding waiting for `readyState === 'complete'`
refactor($anchorScrollSpec): remove unused variable