[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.
(maint) Remove nonfunctional tests

Passing a block to #expects() ignores the passed block which means that
this code was catching the wrong thing and we don't want to test this
anyways.
Merge pull request #624 from adrienthebo/feature/facter-2/fact-239-aggregate-resolution-dsl

Feature/facter 2/fact 239 aggregate resolution dsl