(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).
Actually you're right, the GC does not run in a separate thread and I forgot that the Ruby VM spills registers to the stack anyway using a setjmp before doing the mark phase.  In retrospect, this seems to be an outmoded attempt to keep VALUEs visible to the GC that the MRI doesn't seem to advocate anymore.  My opinion is that these are not necessary and can be removed.