Add aliases to create the two types of branches we'll need in the future.

Summary:
Once we start doing github-style deploys, everyone will have to start
developing on a branch, rather than on master.  At github, they made a
new such branch for every feature they wanted to deploy, meaning you
made them a lot.

But we'll also still want to create the local branches that
phabricator uses to manage reviews.  In other words, we'll want two
types of branches: a feature branch we create for the purposes of
deploying; and some number of phabricator branches off of that to
write code, get it reviewed, and commit it (to the feature branch).

This can be confusing, and hard to remember the magic incantations
needed for each, so I created two aliases:

git deploy-branch:
   create a new branch and pushes it to the remote (github), which it
   will then track.  If this branch-name already exists on the remote,
   it will still create the new branch (locally), but warn you that
   it's not as new as you might think.  By default, this new branch
   is a copy of ("based on") master, but you can specify another
   based-on point as arg #2.

git phabricator-branch:
   create a new local branch.  This branch will track the (local)
   master branch by default, though a different tracking-origin can be
   specified as arg #2.  This is what 'git co -b <branchname>' does
   today, and you can continue to use that formulation over git
   phabricator-branch if you want.

As abbreviations, I also provide git db and git pb.

While in the area, I cleaned up the alias section, after finding some
very helpful comments and examples of how to get the syntax right
(.gitconfig considers semicolons to be comments by default; who
knew?):
   http://stackoverflow.com/questions/9478496/add-a-git-alias-containing-a-semicolon

I also improved 'git incoming' and 'git outgoing' to use the
programmed-in remote automatically rather than having to have you
specify it.  (git incoming used to have the flexibility to deal with
multiple remotes, but I figured that's not so useful in practice so I
nixed it in favor of simplicity.)

Make it so phabricator-branch only works off a deploy branch, not off master.

Rename the wording on the error message, and have review-branch as an alias.

Use show-ref rather than grep as the 'right' way to check a ref exists.

Test Plan:
Ran
   git pb test
and saw it create a new branch that tracked master.  I then ran
   git pb test2 test
and saw it create a new branch that tracked test.  I then ran
   git db db-test
and saw it create a new branch on the remote called db-test, which
db-test tracked.  Finally, I ran
   git branch -d db-test
   git db db-test
and saw it re-create db-test, tracking upstream db-test, but with a
warning that upstream db-test already existed.

   % git pb test
   ref: refs/heads/master
   You must branch off a deploy-branch, not master

(none new)

% git deploy-branch deploy-test
Branch deploy-test set up to track remote branch deploy-test from origin by rebasing.
Switched to a new branch 'deploy-test'
WARNING: using already existing branch origin/deploy-test

So it recognized this branch exists.

% git db deploy-test2
Switched to branch 'deploy-test2'
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:Khan/webapp
 * [new branch]      deploy-test2 -> deploy-test2
Branch deploy-test2 set up to track remote branch deploy-test2 from origin by rebasing.

So it recognized this branch did not yet exist.

Reviewers: alpert

Reviewed By: alpert

Subscribers: alan, benkomalo, chris, jlfwong

Differential Revision: http://phabricator.khanacademy.org/D11000