Add augmented assignment traits.
Document these traits.
Inline default augmented assignment implementations.
Add augmented assignment traits to Vim and Kate.

While I was at it I also changed the obsolete "Quot" to "Div" in both.
Implement augmented assignment traits for num::*.
Add augmented assignment traits to prelude.
Implement augmented assignment for extra::num.
Implement augmented assignment for misc types.

I believe that to be all of the types in the repository, so anything
where this works (for any of the operators: `+`, `-`, `/`, `*`, `%`,
`^`, `|`, `&`, `<<`, `>>`):

```rust
a = a + b;
```

This will also now work:

```rust
a += b;
```

(Well, when the langitem is implemented, anyway.)

AND, what's more, it may be more efficient (e.g. for a vector it won't
create a new vector, it will just push the items onto self).

Not tested in the slightest bit yet. That will come.
(Building is much too slow on my machine.)
Add augmented assignment lang items and use them.
Make it compile again.

There were various basic errors in what I did earlier but I hadn't tried
compiling it...

Also notable at this point is the addition of an implementation of Add
for ~str which was not there before; automatic casting to an &str took
care of letting + work for it. I have assurance from dbaupp (@huonw)
that it is OK to add this.

Naturally, this being here still doesn't mean that it *works*.
Stop disallowing augmented assignment in typecheck

This will probably make things fall over all over the place when using
augmented assignment, rather than producing a nice clean error message
saying that "binary operation + cannot be applied to type `A`".
Get augmented operators to almost work.

Currently any attempt to use an augmented assignment operator which
should be valid (i.e. the *Assign trait is implemented correctly) is
failing in an LLVM assertion as it seems an extra argument is being
prepended to the function call. Still trying to figure this one out; I'm
rather out of my depth. :-)