Merge pull request #69 from peterhuene/cfact/40

(CFACT-40) Refactor fact evaluation for future custom fact support.
(maint) Fix passing filter set by const-ref instead of by value.

We should be passing this parameter by const-ref instead of by value.
Merge pull request #70 from peterhuene/maint/byvalue

(maint) Fix passing filter set by const-ref instead of by value.
(CFACT-47) Retry after read failure, as suggested in POSIX documentation.
Merge pull request #73 from MikaelSmith/master

(CFACT-47) Retry after read failure, as suggested in POSIX documentation...
(CFACT-48) Add structured uptime fact

This commit adds a new 'system_uptime' fact,
which returns a map including keys for seconds,
hours, days and a human readable uptime.

Also, the existing uptime facts were updated to
take their values from this new structured fact,
rather than resolving them individually.
Merge pull request #72 from whopper/structured_uptime_fact

(CFACT-48) Add structured uptime fact
(maint) Implement directory enumerating utility functions.

Implementing directory::each_file and directory::each_subdirectory for enumerating directory contents.

Replacing existing uses of directory iterators with the above utility functions.
(maint) scoped_resource should not have default move semantics.

scoped_resource should implement the moving semantics to appropriately modify the other scoped_resource such that the original scoped_resource does not attempt to release the resource.
(maint) Move file utility functions into a type.

Rather than creating a sub-namespace from the util namespace,
scope the file utility functions in a type.  This makes it
more consistent with other utility types.
(maint) Implement environment utility class for manipulating environment variables.

Adding an environment utility class for getting and setting environment variables.
This type is also responsible for specifying the platform-specific path delimiter.
(maint) Fix log message casing.

Fixing all LOG_* macro messages to start with a lowercase character for consistency.
(CFACT-43) Implement Ruby API.

Implementing dynamically loading and binding to MRI.
Loading custom fact files into the Ruby VM.
The Facter interop layer isn't yet implemented, so custom facts will currently fail to load.
(maint) Remove dead source code.

Removing fact.cc since it isn't actually being used any more.
Merge pull request #71 from peterhuene/custom/facts

(CFACT-43) Implement Ruby API.
(maint) Fix logging namespace for linux DMI facts.

The logging namespace should be "facts.linux.dmi" and not
"facts.osx.dmi".
(maint) Fix always executing system uptime command.

The recent addition of the structured uptime fact caused the uptime
command to always be run.  This is because resolve_system_uptime always
called executable_uptime.  Now that these facts are no longer dependent
on the seconds fact and are now dependent on the structured fact, there
should be a virtual member that simply returns the uptime in seconds
without adding any facts.
(maint) Add platform-specific search paths to environment.

Add search_paths to environment which are the platform-specific search
paths.

Also adding missing unit tests for the POSIX environment class.
(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.
(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.