WIP: git behaviour cleanup

 * [x] detect opreation on a git repository
 * [x] create branch specified by `--onto <branch>` if it doesn't exist
 * [x] when git detected, use `--onto deploy --install --commit` as defaults
 * [x] make `--onto <branch>` a modifier of `--install` instead of checking out branch
 * [x] merge unbuilt branch into `--onto <branch>` as separate commit before committing artifacts
 * [x] skip merge if destination branch already up to date
 * [x] discard artifact commit if it is empty (because destination branch is already up to date)
 * [ ] cleanup code (rename `onto` internals to match actual behaviour)
 * [ ] update existing tests to match new behaviour
 * [ ] add tests to verify new behaviour
Maybe isGit() should cache a single path, and ever after, gitDir() should return that path no matter what you cwd is?

Not that cwd is ever changed....