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
This was my attempt to represent an piece of global state that is an implicit input as a function parameter so that it could be properly memoized.. without re-writing the entire module to conform to my opinions on global/module state.