(CFACT-121) Implement dynamic loading of the ruby dll on Windows

Adds defines for Windows _access and _waccess calls, to make them similar to Linux.
Adds a scoped_error class for Windows system error messages.
Adds execution::which, implemented identically to Facter's method.
Simplifies POSIX api::find_library with use of tie for comparison and assignment.
Implements Windows api::find_library, dynamic_library::load, and dynamic_library::find_symbol to facilitate loading the Ruby dll.
Add --trace option for low-level logging that's rarely useful for debugging and clutters the output.
(CFACT-121) Implement find_by_pattern and minor fixes

Implemented find_by_pattern, which searches loaded DLLs for one that matches the
specified pattern and returns a handle to it in the form of a dynamic_library.
Fixed const and & correctness of helper functions.
Changed Ruby library version comparisons to use int instead of string.
Check that a sub_match is valid before using lexical_cast in regex.hpp, so optional
matches don't throw an exception.
Merge pull request #137 from MikaelSmith/task/master/CFACT-121-implement-ruby-facts-on-Windows

(CFACT-121) Implement dynamic loading of the ruby dll on Windows
(maint) Fix scoped_resource to not have a vtable.

If we prevent scoped_resource from being free-store allocated by
deleting new and delete operators, then there's no reason for
scoped_resource to have a virtual destructor.

Additionally, the move semantics weren't correct.  There's no reason to
default construct either the resource and the deleter of the old object.
Instead, simply move them.
(maint) Remove unncessary variable in CMake source lists.

We don't need the verbose use of the CMAKE_CURRENT_LIST_DIR variable in
our source file lists.  The files are already relative to where the list
file.
(CFACT-124) Move os and os_family constants out of POSIX.

Moving the os and os_family constants out of POSIX and into the generic facts
namespace where they can be used by Windows too.
(CFACT-124) Refactor kernel resolver into a base that can be used by Windows.

The base resolver is now responsible for adding the facts.  The POSIX child
type gets the data only.

This will allow us to share the fact definitions between POSIX and Windows.
(maint) Add missing doc comments.

Adding missing doc comments to make doxygen happy.
(CFACT-124) Refactor base DMI resolver so it can be shared by Windows.

Refactoring the base DMI resolver to keep the fact definitions in a
single place (the base).  The child types are only responsible for
returning data to the parent.
(CFACT-124) Refactor filesystem resolver into a base implementation.

Refactoring the filesystem resolver into a base implementation that is
responsible for the fact definition.  Child types are only responsible
for populating the data.
(CFACT-124) Refactor identity resolver into a sharable base.

Refactoring identity resolver into a shared base implementation.  The
base implementation is responsible for adding the facts (single
definition) while the child types are responsible for collecting the
data.
(CFACT-124) Refactor memory resolver into a sharable base.

Refactoring the memory resolver into a common base implementation.  The
base implementation is responsible for the fact definition while the
child types are responsible for collecting the data.
(CFACT-124) Refactoring operating system resolver.

Refactoring the operating system resolver into a base that is
responsible for adding the facts and child types that are responsible
for collecting data.  This allows it to be shared with Windows.

This refactoring also merges the LSB resolver in with the operating
system resolver.

Breaking change: some of the names on the os structured fact have
diverged from Facter 2.2 to clean up the less than ideal naming. We need
to investigate if this will be impactful and how to mitigate.
(CFACT-124) Refactor uptime resolver to shared base.

Refactoring the uptime resolver into a shared base implementation that
is responsible for defining the facts while the child types are
responsible for collecting the data.
(CFACT-124) Refactor timezone resolver into base implementation.

Refactoring the timezone resolver into a base implementation that is
responsible for adding the facts and child types that are responsible
for collecting data.
(CFACT-124) Refactor virtualization resolver into base type.

Refactoring the virtualization resolver into a base type that is
responsible for adding the facts and child types that are responsible
for collecting data.
(CFACT-124) Refactoring block device resolver.

Refactoring the block device resolver into a base type responsible for
adding the facts and child types that are responsible for collecting
data.

This also adds the "blockdevice" structured fact representing block
device data.  Unfortunately "blockdevices" is an already existing fact
name.
(CFACT-124) Refactor SSH resolver into base type.

Refactoring the SSH resolver into a base type responsible for adding
facts and child types that are responsible for collecting SSH key data.

This also adds the ssh structured fact.
WORK IN PROGRESS