[WIP] Reform comparison traits

It make checks up to this point, but I've only added a single run-pass test. Test suggestions are welcome!

Next, I'll replicate the `Equiv` [implementations](http://doc.rust-lang.org/std/cmp/trait.Equiv.html) with the new `PartialEq`, replace `equiv` method calls with the `==` operator sugar, and deprecate `Equiv`.

cc @alexcrichton @aturon @Gankro 
cc #19148
> Is there a reason this is for &'a str rather than str?

Yes, with this you can do `string == "Hello"`. LHS has type `String`, RHS has type `&str`. If I change it to the the unsized version, that comparison won't work, instead you'll have to write `string == *"Hello"`