(PUP-2399) Add mailalias acceptance tests

Add basic acceptance tests for mailalias type. This adds acceptance
tests for create, query, modify, and destroy.

The tests assume that the mailalias type manages the default
/etc/aliases text file as well as updating the binary database
that the aliases file is the source for.
(PUP-2399) Remove testing of newaliases

As per PUP-1143, the mailalias type does not manage the state of
the aliases.db file via 'newaliases', 'sendmail -bi', or any other
mechanism due to compatibility issues. Since this is the case,
all testing of the aliases.db file have been removed from the
mailaliases tests in this commit.
(PUP-121) Make include, require, and contain enforce non relative names

This makes include, require, and contain functions transform
relative names to absolute names before doing any lookup.

The transformation is controlled by a metho on scope that is
always called, and that performs the transformation when Puppet[:parser]
== future. This design was selected to ensure that there is one place to
later change (other flags, or in Puppet 4 when the future will
be something else).
(PUP-121) Add more tests, doc, and correct behavior

This generalizes the "make names absolute" to a transformation
of given arguments to class names strings suitable for lookup, and
also applying the transformation to Class and Resource reference types.
(PUP-121) Make examples for relative/absolute shared

This makes the examples that test include, require, contain
share the same tests.

This also adds one missing error condition.
(PUP-121) Improve documentation of include, require and contain
(PUP-121) Fix typo
(PUP-121) Make Puppet::Resource work in transform_and_assert_classname

The type system types are transformed to 3x API Puppet::Resource
long before the functions call back to transform_and_assert_classname
and this functions also needs to handle Puppet::Resource.
(PUP-121) Ensure classes are absolute when transforming to Resource

When the 3x to 4x calls take place, resource references in the form
of a PCatalogEntryType are transformed to Puppet::Resource.
Depending on where these (reference) Puppet::Resource instances are
used they need to either be absolute, or not (yes, 3x is inconsistent).

Since future parser in 3.7 (and later 4.0) will not support dynamic
name scoping, the PCatalogEntryType's should in general be absolute.

This commit changes the transformation to make the created
Puppet::Resource (references) absolute (when it is possible).

This also adds more tests
(PUP-121) Change transformation of CatalogEntryType to not be absolute

The attempt to make all catalogEntryTypes absolute did not
work out so great as the lower level APIs in 3x expect non :: prefixed
names to be absolute.

This changes the transformation made in the evaluator to always use
"relative" names.
(PUP-121) Remove unused ability to enforce absolute type refs

This removes the unused ability in the evaluators transformation
to 3x for resources to also make the reference absolute.
(PUP-2747) Add support for multiple profilers

This commit makes a slight modification to the profiling system,
such that we can register multiple profilers at the same time.

This allows callers to register their own profiler without
worrying about collisions with profilers that might have
been registered by other parts of the code.
Merge pull request #2660 from hlindberg/PUP-121_remove-relative-name-spacing

(PUP-121) remove relative name spacing
(maint) Allow exit code of 1 for unknown subcommand acceptance test.

Fixing acceptance test to now allow for an exit code of 1 when the
"unknown subcommand" error is returned from puppet.
(maint) Refactor shared example from parser/compiler_spec

Previously this spec's tests were a shared_example that had been shared
between runs with parser=current and parser=future.  The future compiler
tests were moved out into
spec/integration/parser/future_compiler_spec.rb in 7a6a7d8.  This maint
fix just removes the unused rspec construction of shared_examples_for
from around the specs in parser/compiler_spec, since they are only being
run against the current parser now.
(PUP-2756) Fix test of future parser evaluation of empty string

An empty string is no longer undef when parser is future, and will
evaluate as true in a conditional test. This commit fixes a test that
was failing this check for the future parser. This, and several like
it, was an acceptance test which was just compiling a simple manifest
with some conditional logic to test evaluation of conditionals. Since
acceptance tests are expensive, I've pulled them back into the
integration specs.

The actual test being fixed is
acceptance/tests/apply/conditionals/should_evaluate_empty.rb which is
now the two 'evaluates empty string as <false|true>' specs in the new
spec/integration/parser/conditionals_spec.rb
(PUP-514) Add support for optionally typed parameters.

This adds support for typed parameters in the ast model, the
grammar, and factory.

At this point, the information is only remembered, but not acted on.
(PUP-514) Add test for parsing of typed parameters

This updates the tree dumper to dump parsed type information
for parameters.
(PUP-514) Add validation and test of 'captures-last' parameters

This validates that only functions may have captures-last, and
that it may only be placed last amon the parameters.
(PUP-514) Add test for validation of 'captures rest' in lambdas