It wraps functionality already provided by "hub checkout". The advantage
with "hub review" are twofold:
* Discoverability. It wasn't until I started browsing the hub source
code that I realized this functionality was present.
* Usability. Just typing the PR number is easier than having to figure
out its URL.
The old `args.After("echo", ...)` approach won't cut it on Windows since
there is no `echo` executable. Thus, nothing was printed on Windows.
Instead, expand Args type with extra functionality that allows Go
callbacks after all commands in the chain have been run.
Also, the new `args.NoForward()` is now preferred to `os.Exit()` since
it's more descriptive and allows `defer` in the calling function.
Instead of displaying plain text help, `hub help <command>` will now
search for man pages to display.
* If `man` is available, hub first tries to locate the local
`../man/hub-<command>.1` file relative to the `hub` executable. If
found, open it with `man`. If not, execute `man 1 hub-<command>`.
* Otherwise, resort to displaying plain text help.
For compatibility with git, `hub help checkout` will display the help
for git-checkout and there will be no information about hub extensions
to this command.
Now with `hub help hub-checkout`, hub will print the help text from
hub's extension to git-checkout.
- No more `c.Short` property. Instead, the first line of `c.Long`
property is considered a short command description.
- The `c.Usage` text can now contain multiple lines.
- The new `c.Synopsis()` method renders usage synopsis for humans:
Usage: hub my-command --arg
hub my-command --alternative-arg
- The new `c.HelpText()` method renders synopsis + full help text.
Before, the argument parser would translate `--help` and `--version` to
their equivalents without the dashes. Now it's not the parser's
responsibility to do that anymore. Instead, wire them up as subcommand
aliases in the runner.