(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.
(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.define_fact
Facter.value
Facter.[]
Facter.fact
Facter.debug
Facter.debugonce
Facter.warn
Facter.warnonce
Facter.log_exception
Facter::Util::Fact.name
Facter::Util::Fact.value
Facter::Util::Fact.define_resolution
Facter::Util::Fact.resolution
Facter::Core::Execution.which
Facter::Core::Execution.exec
Facter::Core::Execution.execute
Facter::Core::Execution::ExecutionFailure
Facter::Util::Resolution.confine
Facter::Util::Resolution.has_weight
Facter::Util::Resolution.name
Facter::Util::Resolution.timeout=
Facter::Util::Resolution.setcode

Aggregate facts are not yet implemented.
(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.
(CFACT-44) Add unit tests for Ruby API.

Adding unit tests to test various parts of the Ruby API.
Merge pull request #74 from peterhuene/custom/facts

(CFACT-44) Implement Ruby Facter API
(CFACT-67) Fix inter-resolver dependencies when resolving all facts.

In an attempt to optimize clearing the collection's data structures
while resolving all facts, we were clearing out the resolver map before
resolving each resolver.  This prevented a resolver from requesting a
fact from another unresolved resolver because the resolver map was
empty.

The correct way to resolve all facts is to simply take a resolver off
the front of the resolver list, remove it from all data structures
without clearing them, and then resolve.  Repeat until the resolver list
is empty.
Merge pull request #78 from peterhuene/cfact/67

(CFACT-67) Fix inter-resolver dependencies when resolving all facts.
(CFACT-50) Modify lookup for Win-specific lib names.

OpenSSL and YAML use different library names on Windows.
(CFACT-50) Fix VC++12 errors on Windows

Default move constructors and assignment operators from C++11 are
unsupported in Visual Studio 2013.
(CFACT-50) Replace POSIX strncasecmp

Use boost ilexicographical_compare for portable case-insensitive
string compare, with Boost Range concepts for fast substring operation.
(CFACT-50) Add link_directories

Required so DLLs can be found on Windows.
(CFACT-50) Add doc for setting up Windows build.
(CFACT-50) Resolve review comments.

Make move constructor/assignment explicitly defined in all compilers.
Move definitions to the source files so we can use forward-declaration
with YAML and RE2.