Make `cargo update` more conservative.

As described in #613, this commit switches the semantics of `cargo update foo`
to updating *only* `foo`, not any of its dependencies. A new flag,
`--aggressive` was added to restore the old behavior.

The behavior of attempting to only unlock `foo`, and then if resolve fails
unlock all dependencies of `foo` is unimplemented as it's not super relevant
right now when the majority of dependencies are git dependencies and resolution
cannot fail for version-related reasons.

Closes #613
update to HEAD
update semver to 0.1.0
move to new interface
Remove version_req.rs in favor of SemVer.

This removes all of the stuff that was in Cargo but should have been in
SemVer, as far as I know.  :confetti-ball:
Don't use a bundled gcc on windows
auto merge of #623 : alexcrichton/cargo/update_to_head, r=alexcrichton
auto merge of #622 : steveklabnik/cargo/update_semver, r=alexcrichton

This closes the loop on my work of getting semver related stuff out of cargo.

This is also built on top of my other PR, so it's not really ready until that actually merges. But it can stand for review now :)
auto merge of #614 : alexcrichton/cargo/issue-613, r=brson

As described in #613, this commit switches the semantics of `cargo update foo`
to updating *only* `foo`, not any of its dependencies. A new flag,
`--aggressive` was added to restore the old behavior.

The behavior of attempting to only unlock `foo`, and then if resolve fails
unlock all dependencies of `foo` is unimplemented as it's not super relevant
right now when the majority of dependencies are git dependencies and resolution
cannot fail for version-related reasons.

Closes #613
Implement `features`

This feature was outlined in #385 [1], and documentation has been included as
part of this commit.

[1]: https://github.com/rust-lang/cargo/issues/385#issuecomment-53917539