Compare #1621. Like that pull request, this one solves #984.
I have rewritten most of @pyfisch's logic to account for @alexcrichton's comments. Specifically, this code will correctly handle adding/removing multiple versions of one package, as well as several packages with different sources, but the same name.
The output looks like this:
```
[georgev@desertvoice cargo]$ cargo update
Updating registry `https://github.com/rust-lang/crates.io-index`
Updating libc v0.1.8 -> v0.1.10
Updating memchr v0.1.3 -> v0.1.5
Updating num v0.1.26 -> v0.1.27
Updating rand v0.3.9 -> v0.3.10
Updating rustc-serialize v0.3.15 -> v0.3.16
```
Comments welcome.
r? @alexcrichton