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
Are we confident that this is the only error code that can be raised? Should we send the errno over the pipe as well?