(MODULES-1176) Use FFI for Win32 API calls

 - Define RegDeleteKeyEx and RegQueryValueEx with FFI instead of using
   Ruby's Win32API which doesn't work properly on x64 due to incorrect
   pointer length definitions.
 - Move FFI introduction into guarded methods inside of base provider to
   avoid loading code on non-Windows.
 - Add some basic additional provider tests for registry_value to validate
   that FFI code is working properly.
 - Add basic test around providers destroy method for registry_key to test
   FFI integration code.
(MODULES-1176) Restrict Puppet compat to >= 3.3.0

- Given this module now requires FFI, it's important to verify in our
  MSI packages, which versions shipped with at least 1.9.x.  It appears
  that Puppet Open Source introduced a win32-dir upgrade to 0.4.3 for
  the release of 3.3.0.  Since win32-dir requires FFI, FFI will be
  present in MSIs released from this point in time:
  https://github.com/puppetlabs/puppet-win32-ruby/commits/1.9.3/ruby/lib/ruby/gems/1.9.1/gems/ffi-1.9.0-x86-mingw32/ext/ffi_c/ffi.c
- Note that the Gemfile wasn't updated until Puppet open source 3.3.2,
  but given it's rare to run Puppet from source on Windows, it's
  safe to ignore that particular discrepancy:
https://github.com/puppetlabs/puppet/commit/11f7c51bd860b86d183120735a7ea6c60e38993f
(maint) Fix typo in error message