Replace duplicate code for loading project manifest
auto merge of #253 : jdeseno/cargo/find-root-manifest, r=alexcrichton

A few of the sub-commands seem to use the same code for loading the project manifest.

I'd like to get rid of the nested matches but, I can't figure how to use something like `and_then` & `or_else` where the type is promoted (Option -> CargoResult etc.)
Ensure LD_LIBRARY_PATH is correct for plugins

At runtime rustc will dlopen() plugins, and if plugins have dynamic dependencies
they're likely to be in target/deps, so we need to make sure that directory is
in the right search path.
auto merge of #257 : alexcrichton/cargo/ld-lib-path, r=wycats

At runtime rustc will dlopen() plugins, and if plugins have dynamic dependencies
they're likely to be in target/deps, so we need to make sure that directory is
in the right search path.
Base get_fingerprint on a PackageId

The fingerprinting code was erroneously using all sources from a manifest when
calculating the fingerprint which meant that sources not yet downloaded were
attempted to be fingerprinted.

The correct source to fingerprint is located in the SourceId field of the
resolved PackageId.

Closes #259
auto merge of #260 : alexcrichton/cargo/issue-229, r=wycats

The fingerprinting code was erroneously using all sources from a manifest when
calculating the fingerprint which meant that sources not yet downloaded were
attempted to be fingerprinted.

The correct source to fingerprint is located in the SourceId field of the
resolved PackageId.

Closes #259
Pass in initialized Source types into compile op
auto merge of #263 : rust-lang/cargo/transitive-deps-unfiltered, r=wycats
Bootstrap cargo with cargo
auto merge of #256 : alexcrichton/cargo/bootstrap, r=wycats

This is extracted from #234 for sanity.

Cargo will inevitably pick up more dependencies over time such as flate compression, tarfile management, an external liburl, etc. These dependencies quickly get out of hand when using submodules, and it's much easier to rely on cargo to just build all these projects.

This is strategy is not guaranteed to work 100% of the time as rust's bootstrapping strategy does. The version of rust being used for a snapshot is not locked down, and a snapshot is not necessarily compatible with all versions of rust. In the worse case scenario we can either create a wrapper `rustc` to be compatible with the last snapshot, or we can have an escape hatch to build everything with Makefiles manually.

This transition seems inevitable, however, and it seems prudent to get the process underway sooner rather than later to smooth out the kinks.