Make shell.exec() treat process error return codes as shelljs errors

This PR makes shell.exec() handle error return codes the same way as other shelljs errors -- by calling common.error(). Especially in fatal mode, this makes error handling of exec more consistent with other shelljs functions.

To test, I temporarily override process.exit(), then put it back... let me know if you have any better suggestions :)