(PUP-2093) Integrate a dedicated dependency resolver.

Prior to this commit, we relied on the Forge's /v1 API to handle dependency
resolution for us; as we move away from that (now outdated) API, we will need to
take responsibility for that functionality in our own codebase.

This change vendors our own dependency resolver, as a stopgap measure. This is
not expected to be reused by consumers of Puppet, and will be deprecated and
removed from this codebase when the dependency resolver is properly published.
(PUP-2093) Migrate PMT to /v3 API.

Prior to this commit, the PMT managed all communication with the Forge via the
(now legacy) /v1 API. That API has been deprecated (primarily due to scalability
concerns), which is less of an issue since it was never officially a public API.

This commit migrates all communication to the Forge to the new /v3 API, which is
expected to be launched as our official public API "soon". This commit also
integrates a standalone dependency resolver, as the /v3 API contains no implicit
dependency resolution (as the /v1 API did); consequently, large portions of the
PMT code have been changed, and others have become unreachable.

This commit also changes the default host that the PMT communicates with, from
https://forge.puppetlabs.com to https://forgeapi.puppetlabs.com (the natural
URL for the Forge API service). Since the tool now expects to communicate with
a completely different service, it will be unable to communicate with services
that do not implement the same /v3 API.
(PUP-2093) Restore use of JSON (over PSON).

In master, we've officially introduced a dependency on the JSON library,
but the previous commit in this branch unintentionally reverted a part
of that commit due to merge conflicts.

This commit restores the use of the JSON library where it had been
previously removed.
(PUP-2093) Support hyphenated module names as dependencies.

In master, hyphenated module names are supported (effectively)
everywhere except as the name of a dependency. A previous commit in this
branch attempted to alleviate that situation, but failed to adequately
test the change and its implications, and potential failures existed.

This change introduces a change to existing tests that triggers the
offensive behavior both in master and in this branch, and refactors the
implementation to apply the necessary transliteration in all required
locations.
(PUP-2093) Improve documentation and test names.

Prior to this commit, there were a number of places where documentation
was missing and test names were insufficiently descriptive.  This commit
adds additional clarity around those places, and makes a couple of code
clarity changes as well.
(PUP-2093) Migrate all PMT code to use JSON.

Prior to this commit, there were scattered bits throughout the PMT code
that still lived under the tyranny of PSON.  Since we've now officially
adopted a dependency on the JSON gem everywhere, our code should run
free and flourish in the new world, where JSON processing is handled
through a less ridiculously named constant – this change fully realizes
that new world for the PMT.
(maint) Fix documentation of Puppet::ModuleTool.environment_for_options

This method was erroneously documented as returning `void`.
Merge remote-tracking branch 'upstream/master' into PE-3182

Conflicts:
	spec/unit/face/module/install_spec.rb
	spec/unit/face/module/list_spec.rb
	spec/unit/face/module/uninstall_spec.rb
	spec/unit/module_tool/applications/installer_spec.rb
	spec/unit/module_tool/applications/uninstaller_spec.rb
	spec/unit/module_tool_spec.rb
(maint) Reverting an unnecessary API change to Pupppet::Node::Environment

Previously, this branch would coerce arguments to Environment#initialize
into Symbols, permitting Strings to be used for names when creating new
environments.  This change rollsback the change that introduced that
behavior.
(PUP-2093) Update PMT acceptance tests for /v3 PMT

Prior to this commit, the acceptance tests were intended to be run
against the older module tool. As such, they were out of date with
respect to the new Puppet Forge API hostname and the new output
conventions from the tool.  This change brings the acceptance tests in
line.
Merge pull request #2504 from pvande/feature/master/pup2093_migrate_pmt_to_v3_api

Migrate PMT to the /v3 API.
Merge branch 'master' of https://github.com/puppetlabs/puppet