librustc: Disallow `&mut` loans from overlapping with any other loans
librustc: Allow `&mut` to be loaned; allow `self` to be loaned; make `&mut` loanable to `&`. r=nmatsakis
libcore: core test fixes for unsafe C functions