Potential fix for issue #119

 - Adding more robust code to handle the case where the exec call within spawn 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
It should be possible to do `os.closerange(3, write_end)` followed by `os.closerange(write_end+1, max_fd)` here.