(maint) Implement execution::which and execution::expand_command.

Implementing execution::which that searches the PATH for the given
executable and returns the full path or empty if not found.

Implementing execution::expand_command that takes a command line and
expands the first component to the full path if found or returns the
original command line if not found.

Fixing execution::execute to return a pair<bool, string> so that the
caller can differentiate between a successful command that returned no
output and a failed command.
(maint) Change Ruby API to be a singleton.

Originally the Ruby API was designed to be reloadable.
However, dlclose may not unload the Ruby library on some platforms.
As a result, the Ruby library remains resident and in a state that makes
it impossible to properly reinitialize.

Therefore, the Ruby API should be changed to a singleton that can only
be constructed and destructed once.
(CFACT-44) Implement Ruby Facter API.

Implementing the Ruby Facter API in C++:
Facter.add
Facter.value
Facter.[]
Facter.fact
Facter.debug
Facter.debugonce
Facter.warn
Facter.warnonce
Facter.log_exception
Facter::Core::Execution.which
Facter::Core::Execution.exec
Facter::Core::Execution.execute
Facter::Core::Execution::ExecutionFailure
Facter::Util::Resolution (as Facter::Resolution with confines)

Not yet implemented:
- Aggregate fact resolutions.
- Need to hook Kernel#require in case facts require 'facter.*'
  Without doing so, Ruby facter will overwrite the above methods
  and facts will not get resolved into the C++ fact collection.
(maint) Reset the boolalpha format flag on the stream.

When writting boolean_values to an ostream, make sure to reset the
alphabool flag on the stream after writting the value.
(maint) Fix string value output quoting.

When outputting string values, we should default to having them quoted
instead of always quoting values in debug output.  This makes it easier
for users to differentiate between values that aren't strings and values
that are.  For example, a boolean value of false should be printed
without quotes, but a string value of "false" should be printed with
quotes.

Refactoring the writing of values to a stream to control
whether or not string values should be quoted.