(#22622) External output defaults to empty string

 - Previously, if an external fact generated empty output, parse would
   be called with a nil, which cannot have each_line called on it, and
   would cause Facter to crash.  This sets a reasonable default for
   external command output to the empty string
Merge pull request #567 from Iristyle/ticket/stable/22622-external-facts-without-output-cause-failures

(#22622) External output defaults to empty string
(Maint) Execute test on all agents using beaker's DSL method

Previously, the test was only executing on the first agent host, and it
attempted to run facter directly, which fails on windows when executing
via ssh, because facter is a .bat file, not an executable.

This commit updates the test to run on all agent hosts, and it uses
beaker's built-in DSL method for executing facter, which ultimately
executes:

    cmd /c facter --puppet test_fact1

It also uses beaker's method for passing environment variables to the
command being executed.
Merge remote-tracking branch 'upstream/stable'

* upstream/stable:
  (Maint) Execute test on all agents using beaker's DSL method
  (#22622) External output defaults to empty string

Previously, if Facter::Util::Resolution.exec returned nil, the
KeyValuePairOutputFormat.parse method was never called, which is what
returns an empty hash. This was causing a test to fail.

Paired-with: Ethan J. Brown <ethan@puppetlabs.com>