(maint) Add rake task for parallelizing specs.

Adding a 'parallel:spec' task that will group specs and then run those
groups in a parallel set of processes.

By default, parallel:spec will bunch the specs into groups of
approximately 1000 and concurrently run each group up to the number of
processors reported by facter.

The task takes two parameters: process_count and group_size.

Running with a process_count of 1 (parallel:spec[1]) will behave like
the existing 'spec' task, except it will still group the tests and
recycle the spec running process between groups.  This has the added
benefit of limiting the spec running process' working set, at the cost
of being a little slower.
(PUP-1563) resolve_install_conflicts excessively recurses

Previously, resolve_install_conflicts was called from inside the
modules_by_path iterator causing each module and its dependencies to be
checked for conflict for each installed module, even if the installed
module was completely unrelated. With a tree of dependencies and dozens
of previously installed modules, this walk can take hours.

This patch fixed the problem by moving the recursion outside of the
modules_by_path iterator loop.
(PUP-1563) Don't recurse when dependencies are empty

Previously we would recurse for each leaf dependency unnecessarily.

This commit ensures we only recurse if we have a non-empty set of
dependencies, and adds a debug message when conflicts are checked.

It also adds a spec tests to ensure we evaluate each module for
conflicts only once.

Paired-with: Josh Partlow <joshua.partlow@puppetlabs.com>
Merge pull request #2416 from peterhuene/maint/parallel_specs

(maint) Add rake task for parallelizing specs.
Merge branch 'pr/2322'

* pr/2322:
  (PUP-1563) Don't recurse when dependencies are empty
  (PUP-1563) resolve_install_conflicts excessively recurses

Closes GH-2322
(maint) Fix parallel:spec rake task when dependencies are not present.

If rspec isn't installed, rake will fail because the parallel.rake file
cannot be loaded.

The fix is to only define the task if rspec/facter can be loaded.
Merge branch 'master' of https://github.com/puppetlabs/puppet