(pup-640) Update report schema for error events

Previously, special handling was added to synthesize a report
event even when the property application failed early. However,
when this change was made the report schema wasn't updated,
so the schema did not allow for several fields in the event
to be null (as they are for one of these synthesized events).

This change updates the report schema to reflect that certain
fields can be null. It also adds a spec test including an error
event, which requires the schema change in order to pass.
(maint) Add optional_parameter_count method to Closure

Add a method to return number of optional parameters on
Puppet::Pops::Evaluator::Closure just like Puppet::Parser::AST::Lambda
has.
(pup-1524) Correct resource_present? to account for purged

The fix for http://projects.puppetlabs.com/issues/23081 included
e376b9d8, which refactored some of the resource_harness code and
introduced ResourceApplicationContext.resource_present?

At the time that method only checked current_values[:ensure] against
:absent, which meant that if current_values[:ensure] was :purged,
then resource_present? was true and the code thus attempted to
sync additional properties. This resulted in the double events
noted in this ticket (the first one in manage_via_ensure_if_possible,
the second (unnecessary) one in sync_if_needed).

This change adds a present? method to Puppet::Type, the default
implementation of which just checks for :ensure != :absent, but
which must be overridden by other types that have additional values
for :ensure that also imply that the resource is not present. It also
overrides that method in the package, file, and interface types,
each of which offer such additional values for :ensure.

In addition, there was another code path for duplicate events
because the previous code didn't distinguish between not using
ensure and the ensure check failing (e.g. due to a provider failure).
To address this, the code was refactored slightly to introduce
the NO_ACTION return from sync_if_needed.
Merge pull request #2307 from kylog/issue/pup-640/report-schema-updates-for-error-events

(pup-640) Update report schema for error events
Merge pull request #2321 from kylog/issue/stable/pup-1524/duplicate-events-for-some-providers

(pup-1524) Correct resource_present? to account for purged
(Maint) Extract re-usable resource matcher

Checking that catalogs have particular resources is useful. Let's make
it easier. This also adds parameter matching to the resource matcher.
(maint) Add how-to for destroying individual hosts
(PUP-865) Allow BlockExpression to evaluate everything

Previously BlockExpression would skip evaluating any AST nodes that
implement an instantiate method. The assumption was that instiate only
existed on Hostclass, Node, and Definition AST nodes and those same
classes also did not implement an evaluate method. With the introduction
of the PopsBridge::Program class, this entire house of assumption cards
came falling down, since it impelements both instantiate and evaluate.

The only thing that truly prevented BlockExpression from calling
evaluate was that the default evaluate implementation on Parser::AST
raised a Puppet::DevError to try to catch the case of evaluate not
being implemented for an AST class. Since Parser::AST is entirely
internal and missing an evaluate should show up very quickly in tests,
we can just as easily make evaluate a noop by default, which then
simplifies BlockExpression.

This change fixes the problem where the body of pp files were loaded,
but not evaluated when using the future evaluator and a directory of
manifest files. The problem was triggered by the BlockExpression logic
interacting with the PopsBridge::Program object and the structure
created by the Puppet::Pops::Parser::CodeMerger.
(PUP-865) Only use the pops merge for the future evaluator

The future evaluator is only really in play when both the parser is
future and the evaluator is future. The old check left out the evaluator
portion of that check and so ended up using the wrong CodeMerger when
using the current evaluator with the future parser.
(Maint) Clean up tests
Merge pull request #2325 from zaphod42/issue/master/incorrect-loading-from-manifest-directories

(PUP-865) Fix loading from directories in the future evaluator
(PUP-1551) Change environmentdir to environmentpath

In order to provide more flexibility we are changing the
environmentdir setting to an environmentpath setting so that multiple
environment directories can be set as loaders in an established path
sequence.
(PUP-1579) Rename the Literal type to Scalar

Calling the type "Literal" was bad because it is used not only
for literal values entered in source code, but naturally also
for computed values. A commonly used name for these types is "Scalar".

This commit changes "Literal" to "Scalar" everywhere:
* class name PLiteralType => PScalarType
* its label
* factory methods "literal" => "scalar"
Merge pull request #2326 from hlindberg/pup-1579_rename-literal-to-scalar

(PUP-1579) Rename the Literal type to Scalar
(Maint) Remove documentation rspec output

The -fd flag makes the spec output very verbose, but doesn't really
provide any benefit for us. It does, however, cause builds to take a
significant amount of extra space.
(PUP-1470) Make mk_resource_method with false.

Previously the method generated by mk_resource_methods create getters
that would convert any "falsey" values to `:absent`. This has the
unfortunate effect of making `false` turn into `:absent`, rendering
these generated methods difficult to use for boolean parameters.

This change allows boolean values to be preserved. It technically
changes the behavior of the method in an incompatible manner, but the
correctness of the new behavior was deemed to outweigh any problems.
(PUP-1470) Add test for new behavior

This adds a test for the new (correct) behavior for `false` values on
generated property/parameter methods. It also cleans up the tests to be
much more straightforward.
Merge branch 'pr/2277'

* pr/2277:
  (PUP-1470) Add test for new behavior
  (PUP-1470) Make mk_resource_method with false.
(RE-902) Remove sid from build_defaults

Sid is just too unstable.  It is broken upstream often enough to cause
problems in our automated testing, and since we aren't actively testing
Debian Unstable, keeping it in place for every package pipeline run is
not helpful.
Merge branch 'maint/stable/remove-sid-from-build-targets' into stable

* maint/stable/remove-sid-from-build-targets:
  (RE-902) Remove sid from build_defaults