Add a check_call primitive for catching errored commands
Fix serialization for the subprocess pipe
Make exec error accessible through the runner