[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 are reason this if for `&'a str` rather than `str`?

In the long run, with negative `where` clauses, I think we'll be able to do better with asymmetric deref impls.

For now, I think it might be best to do just `impl PartialEq<str> for String` and `impl PartialEq<String> for str` to keep equality symmetric.