(PUP-839) FFI Util::Windows::Security / file

 - Remove windows-pr file class mixin, and implement CreateFileW,
   GetFileAttributes and SetFileAttributes with FFI
 - Note that open_file overlaps with create_file in file.rb
(PUP-839) FFI Windows::Util::Security.set_privilege

 - Don't call LookupPrivilegeValue directly anymore, instead call
   Puppet::Util::Windows::Process.lookup_privilege_value which has
   already been FFI'd.  Use FFI structs for LUID_AND_ATTRIBUTES and
   TOKEN_PRIVILEGES
 - Ensure that set_privilege has a well-defined return value of true
   when it succeeds, or raises otherwise.
 - Remove TOKEN_QUERY privilege since AdjustTokenPrivileges is not
   filling in a buffer with existing LUID information.
(PUP-839) FFI AddAccessAllowedAceEx

 - FFI calls made to AddAccessAllowedAceEx and AddAccessDeniedAceEx and
   properly verify their return codes against FFI::WIN32_FALSE.
   Further, return nil explicitly when not raising.
 - Update call site in set_security_descriptor accordingly, using and
   freeing a FFI::MemoryPointer for the ACL.
(PUP-839) FFI Util::Windows::Security.IsValidAcl

 - Replace existing calls to IsValidAcl with FFI'd versions, and
   properly handle exit codes
(PUP-839) FFI Util::Windows::Security.InitializeAcl
(PUP-839) FFI Util::Windows::Security.LocalFree

 - Remove windows/memory and use shared FFI::WIN32::LocalFree
(PUP-839) FFI Util::Windows::Security::parse_dacl

 - Previously parse_dacl did some byte manipulation that would have
   likely caused errors in x64.  It also used a GetAce API definition
   that was not FFI'd and therefore would have had incorrect pointer
   lengths on x64.  parse_dacl now accepts an FFI::Pointer as a param
   rather than an address.
 - New FFI structs have been created for ACE, ACE_HEADER and ACL
   that make casting memory addresses much simpler to reason about.
 - An extraneous call to IsValidSid was removed and the code flow was
   refactored to return sooner in unsupported / failure cases.
(PUP-839) Share AccessControlEntry constants

 - Don't rely on the mixin constants from Windows::Security, share
   Puppet::Util::Windows::AccessControlEntry constants
(PUP-839) Windows::Security Constants

 - Move Windows::Security constants directly into
   Puppet::Util::Windows::Security, in preparation for removing
   the gem dependency
(PUP-839) FFI Security.set_security_descriptor

 - Previously SetSecurityDescriptor was using a reference to the API
   definition in windows/security, but has now been replaced with FFI.
 - Define the SE_OBJECT_TYPE enum to be passed to SetSecurityInfo
 - Rather than hardcoding the buffer size for the DACL to 1024, provide
   a calculation to determine the maximum size up-front based on the
   number of ACEs in the security descriptor.  This will at least
   guarantee that the memory buffer is never too small, which could have
   been an issue with the existing code.  Note that a more correct
   method would be to translate each SID in the DACL up-front to a
   sid_ptr, and to tally up the size of the SIDs.
 - To properly calculate a maximum size requires a struct definition
   for the largest ACE which is repeated in several ACE structures
   including ACCESS_DENIED_OBJECT_ACE
 - This required a GUID type to be defined for use in FFI
(PUP-839) FFI Security.get_security_descriptor

 - Previously GetSecurityDescriptor was using a reference to the API
   definition in windows/security, but has now been replaced with FFI.
 - Properly use block form for FFI::MemoryPointer to release any
   unmanaged memory immediately after use
(PUP-839) Remove Windows::Security

 - Sayonara gem and all the cruft that its mixing in