(#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.
(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.
(#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.
Merge pull request #1282 from zaphod42/issue/3.0.x/16178-hiera-puppet-backend-does-not-handle-false

(#16178) Handle the case where the value found is false
(#17158) clarify documentation on behavior of `replace` toward symlinks in file type

Without this patch applied the behavior of `replace` toward symlinks in the file type isn't
made explicit. This is a problem because some other parameters note differences where
symlinks are concerned, and the lack of mention of symlinks in `replace` creates a sense
of ambiguity for some users.

This patch clarifies the behavior of `replace` toward symlinks by improving the description
docstring.
(#12670) Improve the yum provider description

Without this patch applied it is unclear that the `uninstallable` feature does not also
remove dependencies when removing a package. This is a problem because users may expect
dependent packages will be removed.

This patch clarifies the behavior of the yum provider by improving the
description docstring.
(#17820) Avoid allocating and copying hashes unnecessarily

Commit 737c2f66 was implemented to ensure portability with ruby 1.8.5,
but in doing so, it caused severe performance problems, likely due to
allocating a hash, and then merging that, and returning a copy of the
merged hashes.

This commit eliminates the performance issue by not attempting to
merge the hashes, while maintaining compatibility with ruby 1.8.5.

The original code implemented in commit 7002eff7 should be restored in
3.x as that is even faster than this commit, but does not maintain
compatibility with ruby 1.8.5.

Reviewed-by: Josh Cooper <josh@puppetlabs.com>
Revert "Fix Ruby 1.8.5-incompatible code in Transaction#eval_generate"

This reverts commit 737c2f66476b2379f2546150856ea1cd7fdde08a.

The commit above was implemented to maintain compatibility with ruby
1.8.5, but resulted in a severe performance penalty ~500 times slower.
Since Puppet 3 is not compatible with ruby 1.8.5, this commit restores
the original version which is much faster.
(#16728) Unify handling of log coloring and prefixing

Previously the logging would omit the Notice prefix for log messages at
the notice level. This is a change from how things had worked in 2.7
where all log messages got a prefix of the log level.

This commit unifies all of the handling of log level colorization and
output by using a data-driven style and by doing so re-adds the Notice
prefix for the notice log level.
Merge branch 'ticket/2.7.x/17820-slow-eval-generate' into 2.7.x

* ticket/2.7.x/17820-slow-eval-generate:
  (#17820) Avoid allocating and copying hashes unnecessarily
Merge branch 'ticket/3.0.x/17820-slow-eval-generate' into 3.0.x

* ticket/3.0.x/17820-slow-eval-generate:
  Revert "Fix Ruby 1.8.5-incompatible code in Transaction#eval_generate"
Merge remote-tracking branch 'upstream/2.7.x' into 3.0.x

* upstream/2.7.x:
  (#17820) Avoid allocating and copying hashes unnecessarily

Conflicts:
	lib/puppet/transaction.rb
Merge remote-tracking branch 'upstream/3.0.x'

* upstream/3.0.x:
  (#16728) Unify handling of log coloring and prefixing
  Revert "Fix Ruby 1.8.5-incompatible code in Transaction#eval_generate"
  (#17820) Avoid allocating and copying hashes unnecessarily
  (#12670) Improve the yum provider description
  (#17158) clarify documentation on behavior of `replace` toward symlinks in file type
  (#16178) Stop checking for :undefined
  (Maint) Remove duplication and mocking from tests
  (Maint) Require Hiera::Backend where it is used
  (#16178) Add test for behavior of false values in lookup
  (#16178) Handle the case where temp_answer is false but defined.