(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.
A module author can add new features of the form:

<pre>
Puppet.features.add(:myfeature) do
   ...
end
<pre>

and raise arbitrary exceptions in the process. Do we need to catch more than StandardError & ScriptError? On ruby 1.9 the top-level exceptions are:

</pre>
BasicObject
  Exception
    MonitorMixin::ConditionVariable::Timeout
    NoMemoryError
    ScriptError
    SecurityError
    SignalException
    StandardError
    SystemExit
    SystemStackError
    fatal
</pre>

I have no idea what `SecurityException` and `MonitorMixin::ConditionVariable::Timeout` are used for... I'm not sure if ruby 2 adds more...