Merge pull request #637 from adrienthebo/feature/facter-2/fact-322-remove-special-casing-of-empty-string

Feature/facter 2/fact 322 remove special casing of empty string
(FACT-332) Add cfpropertylist task to facter

As cfpropertylist is no longer vendored within facter, but it is still needed
at runtime for facter, this commit adds a simple task to fetch, unpack, and
stage cfpropertylist within the facter libdir, where it will be installed
automatically in the apple package. This task is intended to be used only when
building apple packages.
(FACT-332) Make the package:apple task depend on cfpropertylist

Now that the cfpropertylist task exists, this commit defines it as a pre-task
for the package:apple task. This will ensure that cfpropertylist is fetched and
unpacked before making the apple package, but not before other packaging
tasks, such as deb or rpm.
(maint) Load extra tasks before loading packaging

Because the apple task now depends on the cfpropertylist task, the packaging
will verify that such a task exists when loaded. This means that the extra
facter tasks must be loaded before we load the packaging tools. This commit
moves the facter task loading to before the packaging tool loading.
Merge pull request #638 from haus/ticket/facter-2/fact_332_add_cfp_at_build_time

Fetch and unpack cfpropertylist at build time for apple packages
(FACT-332) Warn when the packaging tasks aren't loaded
Merge pull request #639 from haus/ticket/facter-2/fact_332_add_cfp_at_build_time

(FACT-332) Warn when the packaging tasks aren't loaded
(maint) Return the empty string on exec error

Commit 8a14998 removed most of the special casing around executing
commands and changed calling code to always assume that .exec would
return a string. However the error cases in .exec would still return
nil which would break this assumption.

This commit updates .exec to return the empty string on error. It's
somewhat questionable to do this but if we want to fail hard on errors
we should raise an exception instead of returning nil.
Merge pull request #640 from adrienthebo/maint/facter-2/solaris-uptime-error

(maint) Return the empty string on exec error
(doc) Update documentation for Exection.exec
(FACT-327) Move Process.waitall to Execution.exec

Commit d24504e8 added functionality for waiting on child processes if we
aborted command execution early, but this only really applies to command
execution. This commit relocates the waitall functionality to
Execution.exec so it's clearer what we're waiting on and why.
(FACT-327) Extract command execution base class
(FACT-327) Extract windows/posix execution classes