Merge pull request #2675 from Iristyle/ticket/master/PUP-836-FFI-Windows-User

(PUP-836) FFI Puppet::Util::Windows::User
(PUP-2544) Util::ADSI -> Util::Windows::ADSI

 - Move Windows ADSI code out of puppet/util and into
   puppet/util/windows
 - Update namespace from Puppet::Util::ADSI to
   Puppet::Util::Windows::ADSI
 - Add module / class definitions for ADSI to util/windows.rb
   to prevent tests from blowing up on non-Windows
 - Moving Puppet.features.microsoft_windows? checks to top of
   user and group provider tests for ADSI
 - Update all dependent code, remove unnecessary references
(PUP-2554) FFI Puppet::Util::ADSI

 - Convert ADSI GetComputerName to FFI
 - Add missing error handling for GetComputerName Win32 function
 - Add test that verifies GetComputerName returns a non-empty string
 - Add FFI MemoryPointer aliases for dwords

Conflicts:
  spec/unit/util/windows/adsi_spec.rb
Merge branch 'pr/2677'

* pr/2677:
  (PUP-2554) FFI Puppet::Util::ADSI
  (PUP-2544) Util::ADSI -> Util::Windows::ADSI

Closes GH-2677
(PUP-840) FFI Puppet::Util::Colors

 - Replace WriteConsole / WriteConsoleOutputCharacter calls with FFI
   equivalents
 - Remove string_encode function as it's no longer necessary and the
   test that was using it