(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).
Technically `vector<T>::iterator` may have a destructor (usually for aiding detecting invalidated iterators).  Given that `resolution::suitable` may raise a Ruby exception (any exception as we call into a user-provided Ruby block), this is declared outside of the rescue so that it will get destructed.