Clean up git behaviour

 * [x] detect git repository
 * [x] make `--onto <branch>` a modifier of `--install` instead of checking out branch
 * [x] make `--onto BRANCH` default to `"deploy"`
 * [x] when git detected, use `--install --commit` as default operation (implicit `--onto deploy`)
 * [x] when committing, create branch if it doesn't exist
 * [x] merge HEAD into deploy branch as separate commit before committing artifacts
 * [x] skip merge if destination branch already up to date
 * [x] don't commit build artifacts if they are identical to the target branch's content
 * [x] update existing tests to match new behaviour
 * [x] add tests to verify new behaviour
Its meant to read as `the default is to (bundle and install) followed by (
commit if operating on a git repository or pack if not)`, but I read it as `(bundle and install followed by commit if operating on a git repository) or (pack if not)`.

Could you just expand as "With no options, the default depends on whether the current package is a git repository. If it is, it does a,b,c. If it is not, it does x,y.z."