PUP-1450 Windows file resource Invalid DACL errors

 - When the source of a file resource is referred to through a symlink
   it's possible the volume for the real file does not support ACLs.
   Unfortunately it's not possible to simply readlink the path to
   determine the real path / volume, so the best thing to do is
   attempt to read the DACL of the file, catch the exception when it's
   invalid and fallback to default owner / group / mode on Windows.
 - Furthermore, under VirtualBox, the standard ERROR_INVALID_DACL is
   not the error that propagates, but rather ERROR_INVALID_FUNCTION, so
   there is special handling for that scenario.
 - Note that this particular issue also affects paths like the Puppet
   module path puppet:///modules that may be symlinked in environments
   like Vagrant.
PUP-1450 Honor source_permissions_ignore

 - In further debugging this failure, it was discovered that despite
   the :source_permissions parameter being set to :ignore on the file
   resource type, that we're still attempting to stat the source file
   and extract group / owner / mode.  So instead of trying to stat the
   file, catching errors, and falling back to defaults, we properly
   ignore the group / owner / mode of the source file and provide
   reasonable defaults on both Windows and Linux.
 - In Windows, the defaults continue to be
   :owner => 'S-1-5-32-544' (BuiltinAdministrators)
   :group => 'S-1-0-0' (Nobody)
   :mode => 0644
 - On other operating systems, the defaults are now set to be
   :owner => Process.euid
   :group => Process.egid
   :mode => 0644
 - Several tests were refactored to be less fragile with respect to the
   :source_permissions parameter