(#5752) Handle read errors in parsedfile provider

The parsedfile provider can handle multiple targets (multiple files,
multiple crontabs, etc) but the provider does not handle the case when
retrieving a target during prefetch fails. When the provider does only
handle one target this doesn't really matter because a possible error is
caught at a higher level (inside Puppet::Transaction). But if the
provider handles multiple targets, one error will cause the whole
prefetching method to fail and all targets are treated as empty.

One example of the issue is described in #5752: Multiple crontabs are
manages with crontab resources and one cronresource describes a
cronentry of an absent user. Because prefetching the crontab of the
absent user fails, the crontab of *all* users are purged and every
crontab entry which is not managed by puppet is lost.

The change now handles the error inside the parsedfile provider itself,
so only the target that is causing troubles is treated as empty.
(#5752) Raise specific error in file type

The current behavior of read errors in file types is to raise a generic
error, which is difficult to rescue without rescuing everything. This
commit adds a new exception subclass that can be explicitly rescued
without rescuing every other error.
(#5752) Rescue filetype read error in parsedfile

Without this commit the parsedfile provider will rescue any error
generated from filetypes, regardless of if it's something that can be
handled. This commit explicitly rescues errors generated when read
errors occur so that errors that can't be handled are correctly
propagated.
Merge pull request #1533 from adrienthebo/5752-rescue_parsedfile_prefetch_errors

5752 rescue parsedfile prefetch errors