(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.
I think it was written that way to ensure one poorly written application didn't cause `puppet help` to fall ungracefully. For example if you install a module that defines a new application, and now suddenly `puppet help` blows up. Previously, if there was a syntax error in the application, we would have silently swallowed the error (which seems bad), and now we might blow up...

It might be better to keep this as `StandardError` and if that happens specify an error message for the application summary like we do for face-based applications:

<pre>
          result &lt;&lt; [ "! #{appname}", "! Subcommand unavailable due to error. Check error logs." ]
</pre>