lib: improve error handling in `Host`
lib: store default-shell in `Host.t`
lib: fix default-shell in `get_shell_command_output`
lib: simplify `Host.get_shell_command_return_value`
lib: simplify `Host.do_files_exist`
lib: homogenize `Host.run_shell_command`
lib: homogenize `Host.ensure_directory`

The code used to have a call to `System.ensure_directory_path`
which may be better than `mkdir -p` but it was introducing potential
subtle differences between local and ssh hosts.