feat($location): add support for state and title in pushState

This is a continuation of #3325, re-created per my e-mail thread with @IgorMinar.

Adds $location pushState & replaceState methods acting as proxies to history
pushState & replaceState methods. This allows using pushState to change state
and title as well as URL. Note that these methods are not compatible with
browsers not supporting the HTML5 History API, e.g. IE 9.
In current logic state cannot be changed from `undefined` to `null` and vice versa; without this line the following:
```js
$location.state({a: 2}).state(null).state(undefined);
```
would result in `$location.state() === null` and this:
```js
$location.state({a: 2}).state(undefined).state(null);
```
in `$location.state() === undefined`.

That's why I normalized it to always return `null` in such cases; not sure if that's worth it. Tests currently check `.toEqual(null)` so both cases would pass.