(maint) Reset facter search path when resetting facts

The previous implementation of Facter search paths was only additive and
there was no way to remove Facter search paths once added. This is
especially problematic when running the Puppet specs which wind up
reloading Facter frequently and adding search paths, and can wind up
adding thousands of meaningless paths. This commit resets the Facter
search path on `Facter.reset` so that when facts are reset, the known
search pats are reset as well.
Merge pull request #628 from adrienthebo/maint/facter-2/cleanup-search-path-on-reset

(maint) Reset facter search path when resetting facts
[FACT-239] Cleanly evaluate blocks in resolution context

doing an `#instance_eval` on another object is a little bit evil and
entangles the calling object and object being evaluated. This commit
defines an `#evaluate` method on resolutions so that resolutions can
define the behavior of evaluating a block.
(FACT-239) Delegate Fact#add to Fact#define_resolution
(FACT-239) Move resolution interaction to facts

Facter::Util::Collection never directly interacts with resolutions, so
it doesn't make a lot of sense for the collection to be setting options
on resolution instances. This commit pushes the last of that
entanglement into Util::Fact, which does interact with resolutions.
(FACT-239) Expose resolution type controls

This commit exposes the ability to create different types of
resolutions. When a resolution is being created the `:type` option can
be specified, creating either a simple resolution (using `:type =>
:simple`) or aggregate (using `:type => :aggregate`). If no type is
given the type defaults to simple.

If a resolution is redefined the requested type is compared against the
currently existing resolution. If the types are mismatched an error will
be raised since there's no particularly good way to resolve this
discrepancy.
(maint) Iteratively deep merge values for default aggregate

Without this commit the aggregate deep merge behavior would try to pass
all chunk values to the deep merge method at once, which was pretty
broken. This commit uses inject to iterately merge all values.
(maint) Clean up facter specs

This reorganizes tests against the top level collection, deletes some
tests that have absolutely nothing to do with the Facter object, and
removes tests that check for a method since other tests will fail if
those methods are removed.
(FACT-239) Implement Facter.define_fact

This allows calling classes to create or reopen a fact by itself,
without interacting with resolutions.