[WIP] Generate Cargo.lock on successful resolve
WIP
ICE
Successfully roundtrip the lockfile

This writes out and reads the lockfile, but it does nothing to verify
that the lockfile is still up to date, so it's not actually ready to be
used.
Fix all tests and rebase conflicts

This rebases the lockfile branch to master and updates all code necessary to get
the tests passing again.
Use precise if it's there
Use sources from the lockfile

The sources in the lock file contain precise information about git deps so we
want them over the non-precise versions in the source.
Be sure to not emit a lone `?` in a URL
Optimize freshness of git repos

This commit cuts down on the number of invocations of `git` to make the "happy
path" of an up-to-date git repo much smoother. The precise information is also
applied from the lockfile to speed things up.
Avoid executing git in fingerprint()

We already discovered the local rev earlier on, so there's no need to rediscover
it through git.
Add a small profiling framework

This should help aid in debugging slow parts of cargo by setting the
CARGO_PROFILE environment variable.
Touch up some documentation around commands
Implement cargo-update
Ensure update updates all shared deps
Go back to manually stringifying resolve
auto merge of #301 : alexcrichton/cargo/lockfile, r=wycats

This PR is a series of commits building off the `lockfile` branch which finishes the work on the lockfile as well as implementing the `cargo-update` command.

This PR deprecates the `-u` flag in favor of the `cargo update` command.
Refactor cargo_test into an ops module

The logic for doc tests will get a little complex, so this is moved to aseparate
module instead of inside the executable.
Implement doc tests

Whenever `cargo test` is run and a testable library target is available, the doc
tests will be run. This can be opted out of with `test = false` as usual.

This is currently not super useful due to rust-lang/rust#16157, but I expect
that to be merged soon. In the meantime examples will need to `extern crate foo`
explicitly.