Add work-in-process handling to git/Vim

There are now `git wip` command and `git wip-restore` commands. The
former creates a temporary commit (like a `git stash`, but on the
current branch instead of in an unreferenced tip), and then pushes that
branch to a remote branch specified by the `wip.remote` and `wip.branch`
settings. These settings default to 'origin' and 'wip' globally, but can
be overridden per-repository. The latter command pulls the latest
commits on that WIP branch and simply rolls back the commit and leaves
the repository in a modified state.

The `git wip` command will save all files in the repository as-is,
including currently-untracked files. It's important to remember this, as
any files with, say, passwords or other sensitive data which have not
yet been ignored via `.gitignore` will be added, or debugging statements
that are getting frustrated and rather-less-than-polite will also be
saved. Note that, as these commits are intended to be temporary and
ultimately discarded, the pushes are done with `--force`, to force the
current history-plus-WIP up onto the remote WIP branch and disregard the
last time it was run. So, this is not safe to do if you're trying to
merge two works in progress on alternate machines.

Also, there are shortcuts in Vim which use Fugitive to do the `git wip`
and `git wip-restore` commands without leaving the current Vim session:
\^S to run `git wip` (mnemonic: "save"), and \^L (mnemonic: "load"). The
^S required an additional step to disable TTY settings to properly work,
this is explained in configs/shell/environment.sh.