(Maint) Override the `parse_results` method

Previously, the Base parser subclasses were not consistent in which
parse method they overrode. The `parse` method wraps the `parse_results`
method with exception handling. Subclasses that could potentially raise
exceptions should override `parse_results` instead.

Note the NothingParser is an exception, since it just returns nil.
(#23368) Simplify how parser is stubbed out

Previously, the methods for stubbing out a parser were repeated across
tests. This makes it more DRY.
(#23368) Quote scripts that contain spaces

The Facter::Util::Resolution.exec method expects that commands with
spaces are quoted. On 2003, external facts are typically under
C:\Documents and Settings\All Users\Application Data. As a result,
facter would always fail to execute external executable facts on 2003.

This is not an issue on 2008 and up, because external facts are
typically located under C:\ProgramData.

This is not an issue for powershell scripts, because we pass the quoted
name of the script to powershell.

This is not an issue for text based external facts, because `File.read`
do not require paths with spaces to be quoted (since its not a command
and possibly arguments, or just a command with spaces).

This commit adds a `quote` method to the ScriptParser so that we quote
the script if it has spaces.
(#22944) Don't execute external facts 19 times

Previously, facter would load every external fact many, many times. For
executable facts, e.g. powershell, this means executing the fact. For
text based facts, it means reading the file, and parsing its output. On
Darwin, it was common for facts to be executed 6 times; on Windows,
19 times.

The problem occurs whenever facter requires a file, e.g. `ec2.rb`, which
references another fact, e.g. `:macaddress` outside the body of any
resolution, and facter has not yet required `macaddress.rb`.

For example, the following will cause all external facts to be loaded:

    if Facter.value(:macaddress)
      Facter.add(:ec2) do
        ...
      end
    end

Note that this is triggered because macaddress comes after ec2.
Similarly, `blockdevices.rb` references the `:kernel` fact outside of
any resolution, so that's another round of external fact evaluation.

This commit keeps adds a boolean flag to ensure we only execute external
facts once.
Merge branch 'ticket/stable/23368-external-scripts-broken-2003' into stable

* ticket/stable/23368-external-scripts-broken-2003:
  (#23368) Quote scripts that contain spaces
  (#23368) Simplify how parser is stubbed out
  (Maint) Override the `parse_results` method
(#22944) Reload external facts after the collection is flushed

Previously, external facts were not reloaded after
`Facter::Util::Collection#flush` was called, which doesn't match the
semantics of the `flush` method.

This commit ensures we are capable of reloading external facts after
`flush` is called.

Note that this isn't an issue when `Facter.clear` is called, because
that discards the collection entirely, so external facts will be
reloaded if necessary.
Merge branch 'ticket/stable/22944-nineteen-times' into stable

* ticket/stable/22944-nineteen-times:
  (#22944) Reload external facts after the collection is flushed
  (#22944) Don't execute external facts 19 times
(maint) Add fedora 20 to build defaults
Merge pull request #572 from melissaanne/maint/stable/add-f20-to-mock-list

(maint) Add fedora 20 to build defaults
(packaging) Update FACTERVERSION to 1.7.4-rc1
(maint) Add a Gemfile for acceptance testing
(packaging) Update FACTERVERSION to 1.7.4