Add rake and Webmock to Gemfile

Not sure how CI ever worked without them, but now it started failing:
https://travis-ci.org/github/hub/builds/15945780
Reduce features in SshConfig scanner for speed

A lot of hub execution time was spent in SshConfig, which was a
reasonably compatible reader implementation for the format described in
ssh_config(5). However, all we ever used this functionality for is
resolving hostname aliases the same way `ssh` on the command-line does.
See 4b57f61e5af42f47b79dc2522a595d66817aa0f7

To speed up hub, this strips SshConfig feature set down to a bare
minimum to keep the original functionality:

- Don't record all configuration keys, just "HostName"
- Drop support for the "key=value" assignment syntax
- Drop support for hostname patterns, including "*" to match any value
Only access ssh_config for hosts other than "github.com"

Assume that "github.com" is not an ssh alias to anywhere else. This
optimizes the most common case in which all remotes in a repository
point to "github.com" in their URLs and in which we can avoid
instantiating SshConfig altogether.
Lazily read "hub.host" configuration only when necessary

For speed, we want to reduce the number of shelling out to git in a
single invocation of hub, and reading from "hub.host" is unnecessary if
the current hostname matches the default host ("github.com"), which is
the most common case.
Avoid shell redirection to silence stderr when shelling out

Shelling out to `git`, which by itself takes ~6ms, used to consistently
take 8-11ms in hub. Due to the number of different data we have to
collect from git, this overhead is the leading cause of slow execution.

Turns out, when we don't use shell redirection, but silence STDERR
ourselves in Ruby, this overhead is gone and the time spent shelling out
is much closer to git execution time.
Read the current git branch directly from `.git/HEAD`

This operates on a presumption that `.git/HEAD` will be in this format
when currently on a checked-out branch:

    ref: refs/heads/master

This change is part of the effort to reduce the number of shelling out
to git in a single invocation of hub.
Check if a ref exists using filesystem, not `rev-parse --verify`

We presume that if "origin/master" ref exists, that means this file
represents it: `.git/refs/remotes/origin/master`.

This is part of the effort to reduce the number of shelling out to git
if an alternative, more direct approach is available.
Read default branch for remote from filesystem, not `rev-parse --symbolic-full-name`

Assume that the default branch ref is stored in the file located at
`.git/refs/remotes/origin/HEAD`

This is part of the effort to reduce the number of shelling out to git
in a single invocation of hub if a more direct alternative is available.