Maybe I misunderstood something: Is the idea to have & and &mut be completely different, or to be overridable by traits like Deref? I could see a use-case for the latter, and from a reread of the discussion it seems like that is the plan (&T not changing meaning sans specialization).
I do usually want &str instead of &String, but I do want &mut String even though I want &mut [T] instead of &mut Vec<T>.
One other thing that came to my mind is how you are going to construct a &String if you do indeed need one, because you want to pass it as an argument to a generic function wanting a &T where T equals String.