Add ruby-prof to gem bundle
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.
Fix Ruby 1.8 failure with missing stderr in Cucumber test

In cukes, we use Aruba which uses ChildProcess to handle spawning of hub
processes in tests. It uses Tempfile to create file descriptors with
which stdout and stderr streams are collected from the child process.

However, when hub finished with an `exec`, the stderr in one test would
be mysteriously blank in Ruby 1.8. I tracked that down to being an issue
of Ruby not flushing STDERR output to the stream (really a Tempfile in
the context of tests). https://travis-ci.org/github/hub/jobs/15965636

This hopes to fix the tests, but shouldn't change anything about how hub
operates normally when invoked directly.
Shell out only once to list git remotes and their URLs

Each hub invocation would previously shell out twice to `git remote`:
1. Once to get the list of available remote names
2. A second time to obtain remote URLs with `remote -v`

With the new approach, we get the list of available remotes and collect
their URLs in the same pass. This is part of an effort to reduce the
number of shelling out to git if not absolutely necessary.
Merge branch 'speed'