(PUP-772) Fix apt provider install_options

Fix apt package provider install options to support hash in addition to
arrays and strings.  This makes it consistent with other package
providers.

Add spec examples to test install options.
(PUP-772) Fix apt package provider spec for install_options.

Fixing the apt package provider spec so that the resource isn't entirely
mocked and returning 'asdf' for every property. Modeling the spec after
the yum package provider spec to accomplish that.

Adding install_option example that tests for hash.
Merge branch 'pr/2082'

* pr/2082:
  (PUP-772) Fix apt package provider spec for install_options.
  (PUP-772) Fix apt provider install_options
  (PUP-772) Add the install_option attribute to the apt provider

This closes GH-2082.
(maint) Consolidate redundant join_options implementations.

Moving the implementation of join_options into the base package provider.
This gives a consistent behavior between all package providers that support install_options.
(maint) Remove travis irc notifications

Apologies for all the churn. This removes the irc notifications
because it turns out that travis doesn't (currently) support
notifications for pull request builds, and those are the only
travis builds we really care about (since we have more comprehensive
jenkins builds once pulls are merged).
Merge pull request #2498 from peterhuene/maint/install_options

(maint) Consolidate redundant join_options implementations.
Merge pull request #2311 from carlossg/PUP-1547

(PUP-1547) Undefined method 'groups' for nil:NilClass when no providers found
(PUP-1433) Ignore deprecation warnings in module acceptance output

Our Debian packages are released with a puppet.conf that includes the
now deprecated 'templatedir' setting.  This causes a large number of
deprecation warnings to appear in the test output.  Since removing the
templatedir setting (which is to the non-default $confdir/templates)
would change the installation for anyone upgrading who had never altered
their puppet.conf, we have to leave the setting in place.

Many of the puppet module tool, and a few other acceptance tests, were
testing all of the output, and thus were sensitive to the sudden
appearance of the deprecation warning in their output.

This commit changes the output checking to ignore extraneous stderr
output.

1) Calls to "assert_equal '', stderr" have been removed, because
an actual error should change the exit code and be caught by Beaker
failing due to non-zero exit code.

2)  Assertions against all output which were only testing stdout output
have been changed to only check stdout output.  (Deprecation warnings
are emitted on stderr).

3)  Assertions which were testing both stdout and stderr (for module
error output), have been altered to use regexp's to ignore extra
warnings.

4) Assertions against stderr have been changed to use regexp as well for
the same reason as #3
Merge pull request #2499 from jpartlow/feature/master/pup-1433-ignore-deprecation-in-acceptance

(PUP-1433) Ignore deprecation warnings in module acceptance output
(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.
(maint) Add a :biff setting turning on biff, future parser/evaluator

The biff setting makes the runtime use 4x catalog builder, scope,
function API. Most things will not work until actual support has
been implemented. Expect feature by feature to migrate.
(PUP-2080) Add first cut of supporting functions written in .pp

This adds the required capabilities to lexer2, egrammar and parser.
Instantiation and calling of functions is not yet implemented. That will
be part of the new loader.
(PUP-2035) Add first cut of instantiators for functions and loader API
(maint) Add dir_containing(name, hash) to spec helpers

This makes it easy to mock a directory structure by giving it
a hash, where non hash entries are content, and hashes are directories.
(PUP-2035) Make loader infrastructure work for functions

This completes basic loader infrastructure for Puppet 4x.
It supports module loaders (from file and gem), static loader
(constants), and a minimal start configuring a puppet_system_loader
and an environment_loader.

Unit testing checks the basic behavior of the loaders.

TODO: configure module loaders based on their dependencies, and the top
most API how code in a module gets associated with its loader.
(PUP-485) Add function assert_type(t, value)

This function asserts that the value is an instance of the given type.
The value is returned or an error is raised.

This function use the new 4x function API.
(maint) Fix type calculator inference of Optional type

Inference of types was wrong, it used PObjectType where it should
have used PAbstractType - the result was that POptionalType was
inferred to be a Ruby regular class and not a type.
(maint) Improve documentation ofthe assert_type function
(PUP-485) Change format for actual type in assert_type error message

Instead of showing all details about the inferred type of the
given value, it is now made generic before output. This is good
for the simpler cases where it is confusing to see e.g. Integer[11,11]
when the value was 11 (an exact range). It does however mean that
information is "lost" when matching against more complex types. A more
complex "type diff" may be required to provide really good output.
Another alternative is to just display the value (not the type) of the
actual - but that may be very long if it is an Array or Hash.