(CFACT-44) Replace cfacter gem with libfacter Ruby API.

This major refactoring accomplishes two things:

* Allows for Ruby objects to be created from Ruby and have the underlying C++ object automatically get created and associated with the Ruby object.

* Moves the Ruby gem implementation into libfacter.  This eliminates the "double switching" being done currently where the gem under Puppet replaces the Facter implementation and then libfacter replaces that implementation with its Ruby API.  This also eliminates the need for a callback mechanism from C++ to Ruby to populate structured facts; the libfacter Ruby API can now return Ruby array and hash objects directly.

This should complete the major Ruby API implementation work.  A corresponding change is required to Puppet to match the gem changes (to be submitted as PUP-3050).
Why use an external declaration outside the anonymous function? Would using a range-for loop be better?