Allow implicit coercions for cross-borrows.

Wherever a type implements `Deref<T>`, allow an implicit coercion to `&T`. Removes the need for most occurrences of `&*`.
I don't understand how this can work?

It seems `let x = &&**e;` is equivalent to the following today:

```rust
let tmp = e.deref().deref();
let x = &tmp;
```

while the latter seems like it should just be `e.deref()` (as `&*e` is now)? Or is there some deep coercions going on here?