Don't conflate stdout and stderr; run commands once

It was previously that if one asserted something about a command's stdout, then
asserted something about the stderr, the 2nd assertion, the one about stderr,
would actually compare to stdout.

Also, each assertion (about the exit status, stdout, stderr), would run the
command each time. Very problematic for commands that are expensive to execute,
or have side effects.
Merge pull request #381 from bitglue/master

Don't conflate stdout and stderr; run commands once