Refactor: CTS: Allow various other ways of giving stdin to a Test.
- It can be a pathlib.Path object, in which case it will be treated as a file that should be read in and given to the command as its stdin. There's no real reason for using pathlib.Path aside from that it provides an easy way to read files in one command and can be differentiated from a command string this way.
- It can be a StdinCmd object, in which case the command specified in that object will be run in the same environment and given to the command as its stdin.
The point of these is to simplify the command strings so its easier to
tell exactly what is being tested, as well as making sure the first
"word" in the command string is correct for output - we want to see
"Testing cibadmin" instead of "Testing cat".