Add a manages_password_salt feature for user type

Previously, the user type implemented the 'salt' property for
PBKDF2-style password hashes. Unfortunately, this caused user
providers that didn't implement getter/setter methods for the salt
property to raise errors.

This commit implements a user type feature called 'manages_password_salt'
that is required for the salt property. Because of this change, only
the providers that require the salt property should implement the
manages_password_salt feature, thus saving the other user type
providers from raising unnecessary errors.
(#12833) Only manage iterations when salt is being managed

The salt and iterations properties are inputs to the PBKDF2 function,
and should both only be managed when the provider manages the password
salt feature.
Merge branch 'bug/master/12833_fix_salt' into 3.0.x

* bug/master/12833_fix_salt:
  (#12833) Only manage iterations when salt is being managed
  Add a manages_password_salt feature for user type
Merge remote-tracking branch 'upstream/3.0.x'

* upstream/3.0.x:
  (#12833) Only manage iterations when salt is being managed
  Add a manages_password_salt feature for user type
(Maint) fixing all lint warnings

This commit changes the examples provided for hiera-puppet so that they
conform to the puppet coding guidelines as enforced by puppet-lint
Merge branch 'maint/master/fix-lint-warnings-in-example-code'

* maint/master/fix-lint-warnings-in-example-code:
  (Maint) fixing all lint warnings
(#16178) Handle the case where temp_answer is false but defined.

Consider:

````
  class foomodule::params {
    $myitem = false
    ...
````

The current code won't handle this because `if temp_answer` is the same
as `if false`.

This commit changes it to use `temp_anser.nil?` instead.
(#16178) Add test for behavior of false values in lookup

This adds a test around the fix to treat a false value in a hierarchy as
a real value.
(#17007) Restore pre-3.0 execute semantics

Prior to 3.0, the failonfail and combine arguments defaulted to true
provided no other arguments were specified. However, if any argument
was specified, even an empty array, or unrelated arguments,
e.g. stdinfile, then failonfail and combine defaulted to false.

These semantics don't make sense, but it's how failonfail and combine
have worked since 2fcbc7f5433fab36b60bedf5a97dd610ef231721 (0.22.4)
and efe9a833c43358e23ae252456a07b37cc9904a0a (0.24.7),
respectively. Changing the semantics breaks providers that specify an
argument, e.g. squelch, and are not expecting an ExecutionException to
be raised.

For now, this commit just restores the pre-3.0 semantics for execute.

In the future, we should create a new execute method with the desired
semantics, and then deprecate the old execute method, filed as #17603.
(#17007) Restore pre-3.0 execute semantics when calling deprecated method

Previously, Puppet::Util.execute(command) had different semantics than
Puppet::Util::Executor.execute(command) due to the `arguments` parameter
defaulting to an empty hash.

As a result, the former defaulted failonfail and combine to false,
whereas the latter defaulted them to true.

This commit changes the Puppet::Util.execute method to pass its
arguments directly through. The only difference between the two is that
the former issues a deprecation warning.
(#17007) Make failonfail and combine explicit

Previously, many providers called Puppet::Util.execute with an
argument(s), which had the side-effect of defaulting failonfail and
combine to false.

This commit does not change any behavior. Instead in places where
execute is called with arguments, it explicitly sets failonfail and/or
combine to false. This way it's less confusing as to what the provider
is doing.
(#17007) Restore exec terminus behavior

Previously, the exec terminus attempts to call the execute method with
failonfail true semantics, but due to commit 8b76be30 for #3836, which
added the combine parameter, the execute method was actually being
called with failonfail false. As a result, the ExecutionFailure
exception was never being raised.

This commit restores the failonfail true semantics by making it
explicit, while preserving the combine => false behavior implemented
for #3836.
(#17007) Restore pre-3.0 command execution behavior

Prior to 3.0, commands were executed using Puppet::Util.execute
without any arguments, so failonfail and combine were true. In commit
89d57e72a, released in 3.0, provider commands were modified so that
the provider could supply options to the execute method. In doing so,
the default options were set to an empty hash, changing the default
failonfail and combine arguments to false.

This commit restores the pre-3.0 command execution behavior, such that
failonfail and combine are true.
(Maint) Require Hiera::Backend where it is used

Previously the Hiera::Backend::Puppet_backend code assumed that
Hiera::Backend had already been included. This was not true, at least in
the tests. This commit has the backend require the files that it expects
to already be loaded for it to work correctly.
(Maint) Remove duplication and mocking from tests

The tests used to have a large amount of duplication around setting
configuration values for Hiera, this extracts them into a common spot
and also removes some of the mocking that was being done in order to
make the tests a little more straightforward and less tied to the
implementation.
Merge pull request #1276 from joshcooper/ticket/3.0.x/17007-restore-execute-semantics

(#17007) Restore execute semantics
Merge remote-tracking branch 'upstream/3.0.x'

* upstream/3.0.x:
  (#17007) Restore pre-3.0 command execution behavior
  (#17007) Restore exec terminus behavior
  (#17007) Make failonfail and combine explicit
  (#17007) Restore pre-3.0 execute semantics when calling deprecated method
  (#17007) Restore pre-3.0 execute semantics
(#16178) Stop checking for :undefined

Puppet no longer returns :undefined as a special value from variable
lookups. This commit removes this extra check from the Hiera puppet
backend.
(Maint) Remove the hiera-puppet readme

The hiera-puppet documentation was not reflective of how to actually use
the puppet backend. This information needs to be cleaned up and moved
into the real puppet or hiera documentation. It is still available in
the old hiera-puppet repo, but is going to be removed from here for now.
Improve Puppet.version API to help automate releases

Without this patch applied, it is difficult to fully automate releases
because the `PUPPETVERSION` constant in code must be updated, creating a
new version of the code.  This circular dependency makes it very
difficult to use `git describe` as the basis for a version string.

This patch addresses the problem by providing a way to break the
circular dependency.  With this patch applied, Puppet will use the
contents of `lib/puppet/VERSION`, if it exists, as the version string.
This VERSION file is not intended to be version controlled therefore
changing it does not create a new version in history as does changing
the code itself.

This patch defines the public API to maintain the software version for
package maintainers.