Auto merge of #2974 - alexcrichton:etag, r=brson
Auto merge of #2974 - alexcrichton:etag, r=brson

Speed up noop registry updates with GitHub

This commit adds supports to registry index updates to use GitHub's HTTP API [1]
which is purportedly [2] much faster than doing a git clone, and emprically that
appears to be the case.

This logic kicks in by looking at the URL of a registry's index, and if it looks
exactly like `github.com/$user/$repo` then we'll attempt to use GitHub's API,
otherwise we always fall back to a git update.

This behavior may *slow down* registry updates which actually need to download
information as an extra HTTP request is performed to figure out that we need to
perform a git fetch, but hopefully that won't actually be the case much of the
time!

[1]: https://developer.github.com/v3/repos/commits/#get-the-sha-1-of-a-commit-reference
[2]: https://developer.github.com/changes/2016-02-24-commit-reference-sha-api/

Closes https://github.com/rust-lang/cargo/issues/2451

eminence/cargo,vojtechkral/cargo,AndiDog/cargo,tshepang/cargo,achanda/cargo,rustyhorde/cargo,sbeckeriv/cargo,tsurai/cargo,tsurai/cargo,rust-lang/cargo,brson/cargo,durka/cargo,vojtechkral/cargo,AndiDog/cargo,sbeckeriv/cargo,tsurai/cargo,AndiDog/cargo,AndiDog/cargo,tshepang/cargo,vojtechkral/cargo,tshepang/cargo,eminence/cargo,vojtechkral/cargo,rust-lang/cargo,brson/cargo,brson/cargo,sbeckeriv/cargo,achanda/cargo,tsurai/cargo,tsurai/cargo,eminence/cargo,durka/cargo,nipunn1313/cargo,AndiDog/cargo,brson/cargo,rust-lang/cargo,tshepang/cargo,brson/cargo,rust-lang/cargo,rustyhorde/cargo,nipunn1313/cargo,sbeckeriv/cargo,eminence/cargo,achanda/cargo,achanda/cargo,nipunn1313/cargo,nipunn1313/cargo,durka/cargo,rustyhorde/cargo,durka/cargo,rustyhorde/cargo