(#16581) Refactor code for converting string and binary sids

This commit moves the methods that were previously part of the security
module into a sid module, and adds tests that only execute on windows due
to its reliance on the `win32/security` gem.
(#16581) Use win32-security gem to resolve SIDs

This commit adds methods for resolving Windows account names into binary
encoded SIDs and back. Account names may be specified with or without the
domain component, or as a SID string. So all of the following are
equivalent names for the LocalSystem account:

    NT AUTHORITY\SYSTEM
    SYSTEM
    S-1-5-18

There is a bug[1] in the `SID.string_to_sid` method in versions of
win32-security prior to 0.1.4, so this commit updates the Gemfile
accordingly.

[1] https://github.com/djberg96/win32-security/pull/1

Conflicts:

	spec/unit/util/windows/sid_spec.rb
(#16581) Documentation changes

Clarify how `name_to_sid` and `string_to_sid_ptr` are different with
respect to accounts that exist versus those that don't. The former returns
nil if the account doesn't exist, while the later doesn't.
(#16581) Use native Win32 APIs to resolve SIDs in providers

Previously, the Windows user, group, and scheduled_task providers used WMI
to resolve SIDs, but it is very slow in a domain environment.

This commit changes the providers to use the `Puppet::Util::Windows::SID`
module instead, and has been observed to be 6000 times faster.
(#16581) Use native Win32 APIs to resolve SIDs in file provider

Previously, the file provider used the ADSI module to resolve SIDs, which
is very slow in domain environments.

This commit changes it to use the Puppet::Util::Windows::Security module
instead. Ideally, the `name2id` and `id2name` methods could be eliminated
and instead have the uid & gid methods delegate directly to the Security
module. But they can't, because the Security module is not require'd on
non-Windows platforms.
(#16581) Deprecate sid_for_account

This commit eliminates the code for using WMI to resolve SIDs, since it is
very slow in domain environments. It also adds a deprecation warning if
any provider calls this method, as they should be using
`Puppet::Util::Security::SID.name_to_sid` instead.
(#16581) Refactor code for sid validation

Previously, the windows file provider knew too much about how to validate
a sid, e.g. catching a specific windows-specific exception.

This commit moves that logic into a `valid_sid?` method and updates the
file provider to call it. In doing so, the logic for `string_to_sid_ptr`
is simplier, in that it always expects a block.

It also removes tests that were refactored into sid_spec.rb in an earlier
commit.
(#11042) indirect via the property to convert group names to numbers

The puppet documentation for managing users says of the attribute gid
"Can be specified numerically or by name".  The ldap provider does not
support specifying by gid by name as (at least on RedHat 389 Directory
Server), it generates a syntax error.  Converting groupnames to numeric
group id resolves the issue.

Reviewed-by: Jeff McCune <jeff@puppetlabs.com>
Merge branch 'nhemingway-fix/2.7.x/11042_ldap_provider_group_names' into 2.7.x

* nhemingway-fix/2.7.x/11042_ldap_provider_group_names:
  (#11042) indirect via the property to convert group names to numbers
Merge branch '2.7.x' into 3.0.x

* 2.7.x:
  (#11042) indirect via the property to convert group names to numbers
Merge branch '3.0.x'

* 3.0.x:
  (#11042) indirect via the property to convert group names to numbers
Merge pull request #1225 from joshcooper/ticket/2.7.x/16581-slow-sid-resolution

(#16581) Don't use WMI to resolve SIDs
Merge remote-tracking branch 'upstream/2.7.x' into 3.0.x

* upstream/2.7.x:
  (#16581) Refactor code for sid validation
  (#16581) Deprecate sid_for_account
  (#16581) Use native Win32 APIs to resolve SIDs in file provider
  (#16581) Use native Win32 APIs to resolve SIDs in providers
  (#16581) Documentation changes
  (#16581) Use win32-security gem to resolve SIDs
  (#16581) Refactor code for converting string and binary sids

Conflicts:
	Gemfile.lock
	lib/puppet/util/windows.rb
Merge remote-tracking branch 'upstream/3.0.x'

* upstream/3.0.x:
  (#16581) Refactor code for sid validation
  (#16581) Deprecate sid_for_account
  (#16581) Use native Win32 APIs to resolve SIDs in file provider
  (#16581) Use native Win32 APIs to resolve SIDs in providers
  (#16581) Documentation changes
  (#16581) Use win32-security gem to resolve SIDs
  (#16581) Refactor code for converting string and binary sids
(#16581) Fix mis-stubbed test

Previously, the spec test failed because it was stubbing the
`sid_for_account` method that the scheduled_task provider no longer
called. This wasn't noticed on my system, because I had a local 'bob'
user, so that test would still "pass" incorrectly, but fail in CI.

This commit removes the `stubs` and adds `expects` for each test as
appropriate.
Merge remote-tracking branch 'upstream/2.7.x' into 3.0.x

* upstream/2.7.x:
  (#16581) Fix mis-stubbed test
Merge remote-tracking branch 'upstream/3.0.x'

* upstream/3.0.x:
  (#16581) Fix mis-stubbed test
(#15081) Make virtual resources work with create_resources

Without this patch the create_resources function is unable to create
virtual or exported resources.  This is a problem because the resources
created by create_resources are not a first class citizen with respect
to resources created from the Puppet DSL, or other means.

This patch fixes the problem by allowing the create resources function
to accept type names prefixed with @ or @@.

For example, the following puppet manifest works with this patch
applied.

    create_resources('@file', {'/etc/foo' => {'ensure'=>'present'}})
    realize(File['/etc/foo']
(#15081) Update create_resources() inline documentation

Without this patch the create_resources function inline documentation is
not up to date with the patch to enable creation of virtual and exported
resources.

This patch fixes the problem by including examples of how to create
virtual and exported resources using the create_resources function.
Merge branch 'dalen-create_resources-virtexport'

* dalen-create_resources-virtexport:
  (#15081) Update create_resources() inline documentation
  (#15081) Make virtual resources work with create_resources