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.