test($route): fix test names
fix($route): fix redirection with optional/eager params

Previously, when (automatically) redirecting from path that fetured a
trailing slash and optional or "eager" parameters, the resulting path
would (incorrectly) contain the special characters (`?`,`*`) along with
the parameter values.

Closes #9819

Closes #9827
feat(ngMaxlength): add support for disabling max length limit

Previously, setting the maxlength to a negative number, would make all
input values invalid (since their length should be less than maxlength,
which is impossible).
This commit changes the behaviour of maxlength/ngMaxlength, effectively
disabling the maxlength validation (always returning true) when maxlength
is set to a negative number. This is more inline to how the HTML5
`maxlength` attribute works (both in browsers and according to the spec:
http://dev.w3.org/html5/spec-preview/attributes-common-to-form-controls.html#attr-fe-maxlength).

Related to #9874
Closes #9995
fix(ngMaxlength): ignore maxlength when not set to a non-negative integer

This makes the behaviour of maxlength/ngMaxlength more inline with the
spec.

Closes #9874
docs(ngMaxlength): document what happens on negative/non-numeric values

Closes #9998
fix($location): allow empty string URLs to reset path, search, and hash

Currently, providing '' to $location#url will only reset the hash, but otherwise has no effect. This
change brings the behaviour of $location#url more inline with window.location.href, which when
assigned to an empty string loads the page's base href.

Before:
$location.url() // http://www.example.com/path
$location.url('') // http://www.example.com/path

After:
$location.url() // http://www.example.com/path
$location.url('') // http://www.example.com

Fixes #10063

Closes #10064
fix($browser): allow chaining url() calls in setter mode

Closes #10157
fix($locale): Allow currency filter to fall back to maxFrac from locale

- Modify default fallback to `NUMBER_FORMATS.PATTERNS[1].maxFrac`

- Remove unnecessary resetting

Closes #10179
fix(ngModelOptions): preserve context of getter/setters

Many thanks to @NevilleS and @jbedard for collaborating with me on a solution to this!

Closes #9394
Closes #9865

BREAKING CHANGE: previously, ngModel invoked getter/setters in the global context.

For example:

```js
<input ng-model="model.value" ng-model-options="{ getterSetter: true }">
```

would previously invoke `model.value()` in the global context.

Now, ngModel invokes `value` with `model` as the context.

It's unlikely that real apps relied on this behavior. If they did they can use `.bind` to explicilty
bind a getter/getter to the global context, or just reference globals normally without `this`.
test($http): parsing headers with multiple values

Closes #9473

Closes #10176
docs(guide/unit-testing): improve unit testing guide

This commit adds to the unit testing guide:

- an explicit section on additional libraries: Karma, Jasmine and
  angular-mocks and link to the docs for those projects too. Explain the
  benefit and use case for each of these libaries
- fully featured test examples and add more documentation
  around them, in particular the controller test
- a clear separation between the section on principles of testing
  and the actual tutorial on writing a test

Closes #8220
doc(injector): adds strictDi documentation to appropriate methods.

Closes #9624
refactor(ngForm): Remove checking event.preventDefault and calling event.returnValue. Related to issue #4557. Worked with @bullwrinkle on this.
docs($location): add examples for some methods

Closes #9754
docs(injector): adds a missing backtick and reformat list.

Closes #10189
fix ($http): throw error when string URL is provided
refactor(*): combine sequence of .push() into one statement

Closes #10192
chore(docs): regroup version selector options into major branches and latest

Before this change we grouped by the  discontinued stable/unstable distinction.

Closes #10053
revert: fix(input): always pass in the model value to `ctrl.$isEmpty`

This commit tried to create consistency by ensuring that `$isEmpty` is not
called on both model and view values but it chose to only use `$modelValue`,
which is not actually correct.

`$isEmpty` is designed to compute whether the `$viewValue` is empty. In
practice this is the only part of the parse/format system that the
directive has control over. We can't rely on the `$modelValue` being in
any particular format since other directives can add in their own formatters
and parsers to completely change this.

(reverted from commit 3e51b84bc19f7e6acc61cb536ddcdbfed307c831)
fix(input[date]): do not use `$isEmpty` to check the model validity