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

The issue appears when we set $location.search() with some object and after that change this object's properties, like that:
```javascript
var obj = {foo: 'bar'};
$location.search(obj); // now url is set to '#?foo=bar'
obj.foo = 'boo';
var currentUrlObj = $location.search();
// current location is still '#?foo=bar' 
// while currentUrlObj is telling that current url object is {foo: 'boo'}
// which isn't correct
```
There's a little demo onJSBin:
http://jsbin.com/rekana/5/edit?js,output
And another JSBin with behaviour fixed on consumer's side:
http://jsbin.com/rekana/1/edit?js,output
I'm sure it's a bad idea to make someone think of that on the consumer's side.
I wonder if we should no-op when the passed search object is the same as the one returned from `search()`, since it would be pointless work