(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
Merge branch 'facter-2'

Conflicts:
	lib/facter.rb