[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
Yes, as I thought, it doesn't work right now:

``` rust
#![feature(default_type_params)]
#![no_implicit_prelude]

use std::iter::Iterator;

trait PartialEq<Rhs = Self> {}

impl<A, B, Lhs, Rhs> PartialEq<Rhs> for Lhs where  //~ error: conflicting implementations for trait `PartialEq` [E0119]
    Lhs: Iterator<A>,
    Rhs: Iterator<B>,
    A: PartialEq<B>,
{}

struct Foo;

impl PartialEq for Foo {}  //~ note: note conflicting implementation here

fn main() {}
```

AIUI, it doesn't work because of the crate concatenability restriction: a second crate could `impl Iterator<()> for Foo`, and then `Foo` would end with two implementations: the concrete one (`impl PartialEq for Foo`), and the blanket one. If we change `Iterator<A>` to `trait Iterator { type Item; }`, then it would be impossible for a second crate to do `impl Iterator for Foo` ("trait and struct not defined in this crate"), and the compiler would allow the above code.