run: refactor run() for subprocess.run() / asyncio
- align run() wrapper functionality and naming with subprocess.run() introduced in Python 3.5, making it a thin wrapper now
- change parameter names for consistency with subprocess.run() and even subprocess_tee which is re-implemented here in a straightforward way
- align CommandOutput with subprocess.CompletedProcess for consistency
- finally support both stream and capture of stdout/stderr using asyncio with tee=True (new default, replaces old direct parameter)
- don't log errors in run(), leave that to caller - simpler code
Thanks to subprocess_tee
authors for inspiration
Closes: #68 (closed)