(#19447) Add :manages_symlinks to file type

 - The ensure => :link feature of the file type is now restricted by
   the :manages_symlinks feature
 - Only the existing POSIX provider allows symlink support
 - Updated relevant tests to check a provider for
   .feature?(:manages_symlinks) over Puppet.features.microsoft_windows?
 - metadata_spec.rb was refactored as RSpec nested tests can override
   their ability to run with true :if conditions. Shared examples
   intended to be run on Windows only were also being executed under
   OSX because provider feature :manages_symlinks check was true,
   despite the enclosing test scope being restricted to Windows
 - file_spec.rb unit tests had 5 new manages_symlinks guards enabled on
   tests, preventing 10 existing tests from running on Windows that
   likely should never have been run in that environment (these tests
   will be re-enabled with Windows symlink support)
(#19447) Puppet::FileSystem::File#symlink(?)

 - All calls to File / FileTest class methods symlink and symlink? go
   through instance methods on the new FileSystem::File abstraction so
   that the implementation can later be swapped for a Windows specific
   one to support symlinks
(#19447) Puppet::FileSystem::File#readlink

 - All calls to File readlink go through the new
   FileSystem::File abstraction so that the implementation can later
   be swapped for a Windows specific one to support symlinks
(#19447) Puppet::FileSystem::File#stat / lstat

 - All calls to File class stat / lstat go through the new
   FileSystem::File abstraction so that the implementation can later
   be swapped for a Windows specific one to support symlinks
(#19447) Puppet::FileSystem::File.exist?

 - All previous File and FileTest calls to exist? or exists? go through
   the new FileSystem::File abstraction so that the implementation can
   later be swapped for a Windows specific one to support symlinks
(#19447) FileSystem::File#exist? calls self

 - Existing code uses PathName#exist? which is insufficient for
   symlinks on Windows
Merge pull request #2047 from Iristyle/ticket/master/19447-windows-symlinks-1-abstraction

(#19447) Phase one, manages_symlinks feature, FileSystem abstraction