Make a test more resilient against the host system

If the host system had $HOME/.cargo/config which configured a user name/email
then this test would fail because those would be prioritized over $USER.

Closes #514
Fix infinite recursion in CargoError impl for Box<CargoError>

Insert necessary explicit derefs.
auto merge of #645 : bkoropoff/cargo/fix-infinite-recursion, r=alexcrichton

Insert necessary explicit derefs.
Use the new Entry API for HashMaps
auto merge of #647 : dotdash/cargo/entry, r=alexcrichton
Allow selectively cleaning packages

This adds a new argument to `cargo clean` which will enable selectively cleaning
particular packages. The command only cleans the package specified, no other
(not the dependencies of the package).

cc #537
Allow specifying what to build as part of `cargo build`

This allows selectively building one dependency within a dependency graph for
debugging its build or such.

Closes #537
Add cargo {test,bench} -p <spec>

This functionality allows running tests and benchmarks on any upstream
dependencies in the dependency graph. This is most useful for path sources all
developed in tandem (see Servo for instance).

In terms of built artifacts, this will actually preserve as many artifacts as
possible. That means that if you test a low-level dependency with the high-level
artifacts already built, the high-level artifacts will not get removed. This
means that it's possible to accidentally have a low-level dependency to depend
on a higher level one just because it's lib is picked up via -L, but this is
generally a necessary evil to get testing to not rebuild packages too often.

Closes #483
Deprecate `cargo update foo`

To maintain consistency with `cargo {build,test,bench,clean}` the `update`
subcommand now takes a specific package via the `-p` argument instead of as a
positional argument.
Improve the error message for ambiguous specs
auto merge of #628 : alexcrichton/cargo/issue-537, r=brson

This is rebased on https://github.com/rust-lang/cargo/pull/617 as I wanted to use one of the functions added in the patch. Otherwise the details are in the commits.
Bump version of dependencies
auto merge of #650 : plcstpierre/cargo/master, r=alexcrichton

At least fixing https://github.com/alexcrichton/git2-rs/issues/10
Fix typos in `cargo build -h`
Update dependencies
Add --open flag to cargo doc
auto merge of #655 : ebfe/cargo/deps, r=alexcrichton

At least rust-encoding needs updating to compile with rust master.
auto merge of #631 : alexcrichton/cargo/issue-514, r=brson

If the host system had $HOME/.cargo/config which configured a user name/email
then this test would fail because those would be prioritized over $USER.

Closes #514
auto merge of #652 : tomaka/cargo/open-docs, r=alexcrichton

Opens the generated docs in a browser.

Since it's more a utility feature, I didn't write this in a robust way. There's no error if it fails to open a browser.
Install materials to comply with upstream licenses

This follows #656 by mentioning OpenSSL in the README, as well as install all
license files on installation. A hand-generated LICENSE-THIRD-PARTY is also
included.

Closes #656

This also approaches #657 by mentioning that we have GPL software in the README.
Cargo will hopefully support a more complete "all source" distribution in the
future, but at this time there is not an easy way to generate a complete source
tarball via cargo.