Use associated types in binop traits

binop traits (`Add`, `Sub`, etc) now have an associated type for their return type. Also the RHS input parameter defaults to `Self` (except for the `Shl` and `Shr` traits). For example, the `Add` trait now looks like this:

``` rust
trait Add<Rhs=Self> {
    type Result;

    fn add(self, Rhs) -> Self::Result;
}
```

This breaks all existing implementation of these traits.

[breaking-change]

---

Needs a snapshot that contains PR #20374 

There are some cfail test that are ICEing, I have marked those with a FIXME. We can land this after a snapshot, or wait for fix of those cfail ICEs before landing this.

r? @aturon