Running system commands. On some platforms this may cause the command to be executed directly, so
shell tricks won't work. The Build monad can be made to log commands executed with all versions
of system by setting buildConfigLogSystem in the BuildConfig passed to runBuildPrintWithConfig.

We define a lot of wrappers because executing system commands is the bread-and-butter of
buildbots, and we usually need all the versions...

Run a successful system command, returning what it wrote to its stdout.
If anything was written to stderr then treat that as failure.
If it fails due to writing to stderr or returning ExitFailure
then throw an error in the Build monad.

Quietly run a successful system command, returning what it wrote to its stdout.
If anything was written to stderr then treat that as failure.
If it fails due to writing to stderr or returning ExitFailure
then throw an error in the Build monad.