(#19447) Puppet::FileSystem::File Windows symlink

 - Windows symlink support has been added to exist?, symlink, symlink?,
   readlink, stat, and lstat.  This overrides any usage of Ruby File or
   FileTest classes which are completely borked on Windows.
 - :manages_symlinks feature of the file provider is enabled with a
   check against Puppet.features.manages_symlinks? which checks for the
   existence of the CreateSymbolicLink call in kernel32.dll
 - FFI wrappers for Win32 API calls CreateSymbolicLink, CreateFile,
   GetFileAttributes, DeviceIoControl and CloseHandle added to
   windows/file
   NOTE: The DeviceIoControl method of resolving symlinks was used
   instead of GetFinalPathNameByHandle, which is known to misbehave
   with UNC paths
 - Any tests against :manages_symlinks feature are automatically turned
   on for Windows, increasing test count by approximately 42 new tests
 - Removed a few symlink tests that were confined to any OS other than
   Windows since they must now be adjusted to run on Windows versions
   that we know support symlinks
 - Updated symlink documentation based on ileUtils.symlink behavior
(#19447) Windows symlink check process token

 - Windows symlink support is enabled not only by the existence
   of the CreateSymbolicLink API call, but also by checking the
   current process token for the SeCreateSymbolicLinkPrivilege
 - Inspired by http://stackoverflow.com/a/2129589
(#19447) check Puppet.features.manages_symlinks?

 - Replace calls to the specific :file provider with the global
   Puppet.features call
(#19447) Rewrite symlink tests for file type

 - These old tests haven't been running since 2010 due to how RSpec was
 setup, and were incorrect
 - Rewrite to let Puppet manage file content, and clean up for better
 readability / maintainability
Maint: Re-word doc string for file type's ensure property

This commit makes the Windows situation with symlinks a bit more clear, and
hopefully clarifies the available values in general.
Fixup with 2003 rescue