[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
Same issues here as with strings: it's not clear why there's an impl on `&[A]` rather than `[A]`, and I think it's best if the impls are symmetric (even if that means they're less flexible for now).