Change `&` to be a borrow operator.

Change the address-of operator (`&`) to a borrow operator. This is an
alternative to #241 and #226 (cross-borrowing coercions). The borrow operator
would perform as many dereferences as possible and then take the address of the
result. The result of `&expr` would always have type `&T` where `T` does not
implement `Deref`.
Your proposal doesn't seem to do any inference at all because it simply derefs as much as possible without looking at the context in which the reference is use. Proposal #241 on the other hand does look like it's doing type inference and the only reason you have to use `y: &T` in the example above is that `y` isn't constraint further. I'd expect `let y = x;` to create a `&Rc<T>` as expected and
```
fn foo(x: &Rc<T>) {
    bar(x);
}
fn bar(x: &T) { }
```
to just work.