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

 - Refactor existing code to add Puppet.features.manages_symlinks and :manages_symlinks as feature
   on file type
 - Only enables this feature on the POSIX provider
 - Introduces new symlink, symlink?, readlink, stat, lstat and exist? functions on Puppet::FileSystem::File
   and refactor existing code to use these abstractions
 - This lays the foundation for Windows specific symlinnk work