Start on new ssh ext_mods system
Pillar overwrite merge stategy
Instead of checking for a live process, check for unread data.

Add a unit test which tests proper behaviour.

Fixes #15941
Split `flag_eof` into `flag_eof_stdout` and `flag_eof_stderr`
Include a test case in order to check for full output from VT
We're sending a signal, not data.
User switching and umask setting does not belong in VT
re-send the ext_mods line
White-space lint fix
finish initial changes for passing inline ext_mods

This also introduces using the shim as a flow control interface,
if this works then we may be able to continue to use the shim this
way to send mroe inline data down
don't double send kwargs
change EOF string, set readline to stdin

This still does not work, sys.stdin will not wait to accept anything
because of the way the pipe reads
change shim to not take the options from the stdin

this makes us modify the shim code inline with the options, while
less clean code wish it is cleaner execution wise.
this still doe snot fix the problem though, as the stdin readline still
does not block
IT WORKS!!!

The shim is no longer passed in as a heredoc because it blocks
stdin. Now the shim python script can be passed into the ssh shell
command and can block! This means that it can prompt the calling
salt-ssh proceess to request extra data. this allows for the
download and update of the ext_mods, but as we move forward it
should allow for the thin deployment to all be in a single command
and not need any scp of sftp, this will also allow us to do bi-derectional
state transactions, maybe even distributing the compile process
which would make salt-ssh even faster
lint
Merge branch 'issue_16370' of https://github.com/cachedout/salt into cachedout-issue_16370
lint
Having data left to read does not mean the process is alive
Make result=False if retcode is not 0 in module.run/wait

This fixes commit 57423e031aeb2d26f82795f36fb09f08b2e17af7 which
introduced this code, but seems to check the wrong part of `ret`
Consolidating 4 calls to salt.utils.network.interfaces() into one.  Not completely happy with the approach of using a global.