(CFACT-40) Refactor fact evaluation for future custom fact support.

Refactoring facterlib for the coming support of custom facts:

* Adding --custom-dir and --no-custom-facts command line optinons (not yet implemented).
* Refactoring fact evaluation so that custom facts can add resolvers via a Ruby API.
* Resolvers can now overlap on the facts they resolve; the last resolver that was added to the collection will be the one that resolves the fact.