- Begin a refactor of `delegator.run` invocation to ensure we capture
and handle failures with our own exception wrappers
- Additoinally capture output and error logging and command information
when running in verbose mode (should avoid significant repitition in
the codebase)
- Refactor `which` and `system_which` to fallback to pythonfinder's
implementation
- Abstract `is_python_command` to identify whether we are looking for
python, this enables us to rely on `pythonfinder.Finder.find_all_python_versions()`
to ensure we aren't skipping python versions
- Fixes#2783
Signed-off-by: Dan Ryan <dan@danryan.co>