based on the Prezto git module
[function](https://github.com/sorin-ionescu/prezto/blob/master/modules/git/functions/git-info)
and further refactored and simplified.
What changed:
- Commit format only in 'detached HEAD' state, so
`$(coalesce "%b" "%c")` is not needed, because you only get one of
those.
- Removed the `added`, `deleted`, `modified`, `renamed` and `unmerged`
verbose contexts.
- `git status` is only used in verbose mode.
- In non-verbose mode, the `untracked` context is not available, and
also untracked files are not considered for computing the `dirty`
context. Using `git status` or checking for untracked files is
[expensive](https://gist.github.com/sindresorhus/3898739).