librustc: Implement write guards for borrowing `@mut` to `&` or `&mut`. r=nmatsakis