PMT tarball install & use rubygems tar implementation

 (#13542) PMT install/upgrade from a local tarball

This path adds support to PMT for installing/upgrading puppet modules
from local tarballs. It depends on a new forge API introduced in:
  https://github.com/puppetlabs/puppet-forge-api/pull/32
Aside from the posibility to install modules from tarballs this patch
also introduces a new algorithm of module dependency resolution which
can do backtracking so is able to find resolutions even in situations
in which the original algorithm would fail.

Since the PMT install/upgrade also uses rubygems tar for reading metadata
from the tarballs, I'm submitting the below patch in this pull request too.

 (#15841) Use rubygems tar implementation in PMT

This patch replaces PMT's use of external tar utilities for unpacking and/or
building modules with a simple pure ruby tar implementation from rubygems:
  Gem::Package::TarReader
  Gem::Package::TarWriter
and the Zlib gzib implementation from the Ruby Standard Library (stdlib).

NOTE that this makes PMT dependant on the rubygems library (for the installation
and/or building of modules anyway). Should this prove to be a problem it should
be relatively straightforward to emebed the relevant classes in puppet.