Fix single letter options

This fixes `{ -c => 'foo.bar=baz' }` to pass `( '-c', 'foo.bar=baz' )' (as two list arguments) rather than `-cfoo.bar=baz`, which git does not accept (see `man git` for the -c option).

I couldn't find any cases of git wanting single-letter options without a space (e.g. `{ a => 'foo' }` becoming `-afoo` as opposed to `-a foo`).  I've also added comprehensive test for these permutations and the other option permutations that weren't covered, and sorted the processed keys for consistent test results in newer perls.