(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.
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