Potential fix for 'exec' failure case

 - Adding more robust code to handle the case where the exec call within fails. Now, spawn will raise an exception if this happens.
 - Adding a test to ensure this exception is raised when an invalid binary is run
For code clarity, let's give these names about what they're for, rather than just generic pipe names. E.g. `exec_err_pipe_read`?