(PUP-2738) Puppet::Util::Windows::User refactor

  - Presently `logon_user` raises an exception or returns the error code
    returned by `CloseHandle`.  Change this to return `true` if the
    method executes without error.
  - This also affects the `load_profile` method and the `password_is?`
    method.  `load_profile` previously returned the `logon_user` return
    value from the outer block, so now returns `true` upon success, or
    will raise an error upon failure
(PUP-2738) open_symlink should wide_string once

 - open_symlink is the only caller for create_file, and create_file
   already calls wide_string on the first parameter.  Remove
   unnecessary wide_string call perfomed in open_symlink
(PUP-2738) Puppet::Util::Windows::File FFI cleanup

 - Break resolve_symlink into an additional helper to simplify memory
   usage / cleanup.  Each time an FFI::MemoryPointer is encountered,
   it's cleaned up immediately after use. Structure code to ensure that
   a REPARSE_DATA_BUFFER is returned from resolve_symlink rather than
   a FFI::MemoryPointer
 - Fix bug in Puppet::Util::Windows::File.resolve_symlink that could
   result in the wrong value being returned.
(PUP-2738) Puppet::Util::Windows::Process FFI clean

 - Refactor wait_process so that the FFI::MemoryPointer for the exit
   code is cleaned up immediately after use.  Note that we capture the
   exit_status within the block, and return it outside of the block
 - Fix bug in Puppet::Util::Windows::Process.process_privilege_symlink?
   that could result in the wrong value being returned.
 - Fix bug in Puppet::Util::Windows::Process.elevated_security?
   that could result in the wrong value being returned.
(PUP-2738) Use block form of FFI::MemoryPointer

 - Existing uses of FFI::MemoryPointer rely on Ruby GC to perform
   non-deterministic memory cleanup.  In an effort to reduce memory
   consumption, use the block form of FFI::MemoryPointer to call free
   on pointers as soon as they're no longer needed.
 - Ensure that we don't use non-local return's anywhere, due to their
   potential dangerous / unexpected behavior.  When inside blocks,
   store off return values in a separate variable to be returned
   outside the block.  When values are only used inside yields, and the
   corresponding unmanaged memory has been freed, return nil outside
   the block.
(PUP-2738) Windows utils appropriate return values

 - Puppet::Util::Windows::File.open_symlink was previously returning
   the integer result of CloseHandle, which was undesireable.  Assume
   the token is always used in a block, so return nil from the method.
 - Puppet::Util::Windows::File.readlink was being a bit dangerous, and
   performing a non-local return within a block.  Use a closure instead
   to capture the return value of resolve_symlink, return outside block.
 - Puppet::Util::Windows::Process.open_procss_token had the same issue
   as open_symlink, and has been changed to return nil.
(PUP-2738) Move CloseHandle -> FFI::WIN32

  - CloseHandle is an API used frequently, so move it to a shared
    definition inside FFI::WIN32.  Remove extraneous definitions and
    update call sites.