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
I'd just do a bare `raise` here, which will reraise the original exception - that makes it easy to see what exception did get raised instead of the one we wanted.