(#12339) Fix a test failure in 1.8.5.

Hash::[] is documented to take a list of arguments that has an even length, and create
a new Hash instance from that list (as key-value pairs).  Ruby 1.8.7 (and probably 1.8.6)
seem willing to also accept an array of two-element arrays as a compromise; unfortunately
this behavior is not portable.  Splatting the flattened array is an effective workaround.

Similarly, Enumerable#sort_by is provided by 1.8.5, but #max_by is not.
(#12349) WIP: list dependency mockup
(#12243) WIP: first pass at installing modules with dependencies
Revert "Revert "(#12339) Adding basic search output formatting.""

This reverts commit b8d77a69135f6d2791f21046c4013feec9721a16.
Revert "Revert "(#12339) Improving documentation around Puppet::Util::Terminal.width.""

This reverts commit c01571a1afb92e5e011bc396777562cdda9d0698.
Revert "Revert "(#12339) Clarifying source attribution.""

This reverts commit 00685a2b5cf489c35ae242532f0db3fd2f6d1461.
Adding behavioral acceptance tests for `puppet module uninstall`.
Adding skeleton acceptance tests for `puppet module search`.
(#12349) WIP: list dependency mockup
(#12243) WIP: first pass at installing modules with dependencies
(#12258) PMT uninstall command should check for metadata

Before this commit the uninstall action does not check if a module has
metadata before uninstalling the module. The uninstall action also
permits using the module directory name (apache) instead of the module
full-name (puppetlabs-apache) when specifying a module to uninstall.

This patch resolves this issue by checking the module has_metadata?
attribute before uninstalling the module.

This patch also enforces the use of only the module full-name when
specifying a module to uninstall:

    $ puppet module uninstall author-modulename

This patch also includes updated tests for the changes in behavior.
Search tests now stub forge.puppetlabs.com
(#12255) PMT uninstall command should check for local changes

Before this patch the uninstall action did not check for local changes
before uninstalling a module.

This patch fixes the issue by checking for local changes before
uninstalling a module.

Example Usage:

    $ puppet module install puppetlabs-apache

    $ vim /etc/puppet/modules/apache/lib/puppet/type/a2mod.rb

    $ puppet module changes /etc/puppet/modules/apache
    warning: 1 files modified

    $ puppet module uninstall puppetlabs-apache
    Could not uninstall module puppetlabs-apache:
      Installed version of apache (v0.0.3) has local changes

This patch includes tests for the change in behavior.
Basic module search tests now assert data.
(#12256) uninstall should check for broken dependencies

Before this patch the uninstall command does not check for broken
dependencies while uninstalling a module.

This patch fixes this issue by checking for broken dependencies before
doing the uninstall.

Example usage:

    $ puppet module uninstall puppetlabs-apache
    err: Cannot uninstall puppetlabs-apache (v0.0.3) still required by:
      puppetlabs-php (v0.0.3)

This patch also includes updated tests for this change in behavior.
(maint) Add --force flag for the uninstall action

Before this patch the uninstall action does not have a way to ignore
local changes or broken dependencies when uninstalling a module.

This patch fixes this issue by adding an --force flag for the uninstall
action.

Example usage:

    $ puppet module uninstall puppetlabs-apache --force
    warning: Ignoring local changes...
    Removed /Users/kelseyhightower/.puppet/modules/apache (v0.0.3)

This patch includes updated tests for the changes in behavior.
Fancy colors.  Easily accessible.
(#12243) Fix the rest of the specs
(#12243) puppet module list explicit when empty modulepath
Cleaning up the search acceptance tests; Forge-related behaviors are commented out.