(MODULES-1247) Support reboot on x86 and x64

 - Puppet 3.7 has changed the gem dependency hierarchy, removing gems
   such as win32-api, windows-api and windows-pr, and updating other
   gems for FFI compatibility.
 - One approach would be to update the gems to be in lockstep with
   Puppet, but that likely prevents the module from working across a
   wider array of Puppet versions.
 - Given how little use of the Win32 API this module makes, instead
   depend on FFI, and create local definitions of the few Win32
   functions needed.  This will effectively redefine some API
   definitions already present in other gems BUT will make the module
   less fragile / susceptible to being broken by a dependency
   hierarchy owned outside the scope of this module.
 - Created local FFI definitions for OpenProcess and WaitForSingleObject
   Moved constant definitions in for WAIT_*, FALSE, SYNCHRONIZE,
   NULL_HANDLE and ERROR_INVALID_PARAMETER.
 - Would have liked to additionally remove sys-admin, win32-dir,
   win32-process, win32-service and win32-taskscheduler gems - but due
   to current Gem dependency resolution, cannot as these gems are
   needed by the Puppet gem.  These gems are not required for this
   module.
(MODULES-1247) CloseHandle on process token

 - Add FFI definition for CloseHandle
 - Ensure that we don't leak handles, by ensuring CloseHandle is called
   against the handle returned by OpenProcess