(FACT-94) Unvendor CFPropertyList

Vendoring CFPropertyList inside of Facter has proven to be very
problematic. Since it's possible to treat CFPropertyList as a real
dependency via gems and can be bundled at build time for DMGs, there's
no real need to vendor it inside of Facter. This commit removes the
vendored code and prevents facter/util/macosx from being loaded on
non-osx platforms.
Merge pull request #619 from adrienthebo/feature/facter-2/fact-94-unvendor_cfpropertylist

(FACT-94) Unvendor CFPropertyList
(maint) Extract Facter logging functionality
(maint) Simplify logging controls

Ruby has these neat things called booleans that we can use to indicate
true/false values. Because of this we can directly specify the
truthiness of something instead of accepting arbitrary strings, numbers,
and other classes and cocercing them to booleans.
(maint) Simplify argument handling for `warn` messages

`Facter::Core::Logging.warn` could accept a string or Array of strings,
but it adds needless complexity and can be better handled by calling
classes. This simplifies the warn method to accept and log a string.
(FACT-273) Always log warnings regardless of log level

If a class is trying to emit a warning the expected behavior is to log
it, since if it's worth warning about it's worth seeing every time, and
if it's not worth warning about every time about then it should debug
message. This commit ensures that all warnings are actually handled.
(maint) Delegate #warnonce printing to #warn
(maint) Emit warnings when log methods called without string
Merge pull request #622 from adrienthebo/refactor/facter-2/extract-and-cleanup-logging

Refactor/facter 2/extract and cleanup logging
(#20216) Print timings to stderr instead of stdout

Facter prints both timings and facts to stdout if timing is enabled.
To facilitate separating both outputs the timings should be printed to
stderr instead.
Merge branch 'backport/facter-2/show-timing-stderr' into facter-2
(maint) Remove Facter.method_missing

The ability to use method_missing was added in 2006 but was never
documented, explained, or generally acknowledge. It was a constant
surprise when invoking a non-existent method on Facter would cause all
facts to be loaded and possibly a completely nonsensical value would be
returned. This commit removes the given code so we can return to a more
sane state of affairs.
Merge pull request #623 from adrienthebo/maint/facter-2/facter-module-method-missing

(maint) Remove Facter.method_missing
(maint) Remove test which tests nothing (but can provoke a failure in tests run after it)
(fact-81) Use Emit.dump rather than to_plist

See https://github.com/puppetlabs/facter/pull/499 and the linked
redmine tickets for backstory. The basic issue here is that
CFPropertyList monkey-patches some core ruby classes with a
to_plist method, which defaults to returning binary data. This
code was originally written to the vendored CFPropertyList
previously included in facter (but unvendored in fact-94),
which provided a different to_plist implementation returning
text data.

This commit avoids the conflicting to_plist implementations by
calling its own dump method, thus no change in behavior.
(fact-273) Return a string for stub of :kernel fact

Previous to this change, this spec test was stubbing :kernel
as :windows. But now facter a) does type-checking on fact
values (Symbol is not allowed) and b) warns on type-check
errors.

Changing this stub to return 'windows' reduces warning
messages during spec runs.
(fact-273) Expect a warning message that can be expected

Add a warning message expectation to suppress the warning message
on stdout/stderr during spec runs.  Also, remove a stub that
duplicated a stub in the before block.
(maint) Don't warn on non-existent paths

Facter was emitting warnings whenever a path specified by
`Facter.search_path` was not a directory, but Puppet was automatically
adding two paths via the `factpath` setting that seem to never exist.
This could cause hundreds of warnings to be generated, none of which are
really that useful. This commit changes the warnings to only be emitted
when a manually specified path is not absolute and silently ignores all
paths that aren't directories.
(fact-273) Remove a test which was a subset of the following test
(fact-273) Add expectation for Facter.warn on timeouts