This is a major refactor of some CLI code. We try to distinguish
GHC versions from other versions, so that we can use distinct parsers.
Hopefully this doesn't introduce new bugs.
This also forces ghcup run to use the new internal ~/.ghcup/tmp dir.
1. short hashes now work
2. print the long hash in addition to the detected cabal version of HLS
3. add `--git-describe-version` switch as an alternative to
`--overwrite-version`
Fix 1. and 2. for GHC as well.
This also slightly changes the default for
'ghcup install cabal/stack/hls'... instead of
only setting the installed version if it's the latest,
we always set it. So the default is `--set`.
For GHC, the default is `--no-set`.