(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).
From http://naipc.uchicago.edu/2014/ref/cppreference/en/cpp/language/range-for.html
"If range_expression returns a temporary, its lifetime is extended until the end of the loop, as indicated by binding to the rvalue reference __range"
Looks to me like the range_expression would return a temporary iterator, and call the destructor at the end of the loop. So have to be careful using fancy things like std::for_each and range-for with Ruby calls.