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
```
sam@samtu:~/w/sn/strong-build (feature/git-cleanup u=) % git rev-parse --git-dir
.git
sam@samtu:~/w/sn/strong-build (feature/git-cleanup u=) % cd test
sam@samtu:~/w/sn/strong-build/test (feature/git-cleanup u=) % git rev-parse --git-dir
/home/sam/w/sn/strong-build/.git
sam@samtu:~/w/sn/strong-build/test (feature/git-cleanup u=) % cd ../node_modules/lodash 
sam@samtu:~/w/sn/strong-build/node_modules/lodash (feature/git-cleanup u=) % git rev-parse --git-dir
/home/sam/w/sn/strong-build/.git
```

AFAICT, no matter what your `process.cwd()` is, git will find and tell you about where the working .git directory is, and you add `/strong-build-index` to it... so for ever key in _gitDirCache, the value of the key will be the same (well, if you are top-level, it will .git/strong-build-index, but same thing). Thus my not understanding why the map.