(FOR REVIEW) (PUP-3521) Fix Puppet's exception swallowing

# FOR REVIEW

This PR attempts to fix Puppet's exception swallowing. It does this by changing places where Puppet rescues and swallows an exception to have a more granular `rescue` clause. 

This PR is going to need some review to ensure these changes are sane.
The big problem that seems to jump out to me here is the possibility of someone writing a custom feature and then throwing a custom exception that inherits from `Exception`, in which case that won't be caught if we don't do `rescue Exception`. Not sure if that's something we want to allow or not. @cprice404 I also think you have a valid point about exceptions such as OOM that really shouldn't be swallowed, I think it's important for those to bubble up to the top.