(maint) Quote class name in init.pp template

According to the style guide:

All resource titles should be quoted. (Puppet supports unquoted resource
titles if they do not contain spaces or hyphens, but you should avoid
them in the interest of consistent look-and-feel.)

A class is a resource.
(PUP-2663) Allow string to contain leading sign in numeric conversion

This makes it possible to use an unary +/- in a string. The sign
of the converted value abides by the unary string sign. White space is
allowed around the sign, and at the end of the string.

'+ 2' + '- 2' == 0

This is of value when dealing with original data in string form
that needs to be converted. Without this it is especially difficult to
pass a negative value around in string form.
(maint) Remove redundant code
(PUP-2691) Re-adding the missing ‘description’ property to P::MT::Metadata.

Prior to Puppet 3.6.0, users had a ‘description’ property which they
could reliably expand into their module skeleton’s ERB templates.  This
property was removed from the default set of properties in Puppet 3.6.0,
which effectively broke template expansion for users relying on it.

This change ensures that users can continue to rely on this property.
(PUP-2703) Make 'tag' be a statement function

Tag function should not require parentheses.
(PUP-2781) Generate correct dependency expressions for new modules.

Since Puppet 3.6.0, `puppet module generate` has automatically created
a `metadata.json` file for users, with a sample dependency on
`puppetlabs-stdlib` to help demonstrate the syntax for expressing
dependencies.  Unfortunately, the generated sample used an incorrect
key name (`version_range` vs `version_requirement`), which is less
useful and was introducing other problems with (e.g.) publishing to the
Forge.

This change repairs that mistake.
(PUP-2557) Error on node inheritance

The future parser needs to be as close as possible to what will be the
default in Puppet 4. By making the node inheritance a warning instead of
an error, it makes it so that Puppet 4 will be significantly different
from puppet 3 with --parser future. This changes it so that both Puppet
4 and Puppet 3 with parser future will disallow node inheritance. The
error message is retained, which should provide good guidance whenever a
user does encounter this.

This change leaves all of the tests for node inheritance only working on
the --parser current. In addition an acceptance test that simply checked
variable scoping with an ENC has been converted to an integration test
along with all of the other tests about variable scope.
Merge pull request #2788 from zaphod42/issue/master/pup-2557-node-inherits-unsupported-in-future

(PUP-2557) Error on node inheritance
(PUP-1299) Stop stripping arrays in future parser

Resource values that were arrays used to be converted to a single value
iff the array only had one element. This created a lot of confusion for
type and provider authors when the value they would set in a manifest
would not be the value they would get in the type. The conversion causes
large amounts of code that would check for values that aren't arrays and
convert them to arrays in various places. There were also often tests
that would be written directly against providers that would then not
catch errors in real use because the author was unaware, or just forgot,
that the array conversion would happen.

Under the future parser this is no longer done. The old behavior,
however, won't issue a deprecation warning because there isn't anything
that can be done about it from a user's perspective. The most likely
outcome from this change is that some manifests may stop working because
a value just happened to be a single-valued array that was on a
parameter that is not supposed to take an array. In such cases the error
would have been masked previously, but now will be uncovered.
Merge pull request #2673 from roidelapluie/init_quote_class

(maint) Quote class name in init.pp template
(PUP-2816) Default forge override in Rakefile

The override for the fake forge to use only showed up in the
ci-bootstrap-from-artifacts.sh, but that only affects how the jenkins
jobs handle the pipeline. When you run the tests on your own machine,
you aren't going to use that script, which would mean that it would use
the wrong fake forge. This moves the override to the Rakefile so that it
will always take effect.
(maint) Correct usage of YARD @raise tags

The documentation of transaction `pre_run_check` methods used the non-existant
`@raises` tag instead of `@raise`.
Merge branch 'pr-2784'

* pr-2784:
  (PUP-2781) Generate correct dependency expressions for new modules.
Merge pull request #2791 from zaphod42/issue/master/pup-1299-magic-array-parameters

(PUP-1299) Stop stripping arrays in future parser
Merge pull request #2713 from hlindberg/PUP-2703_make-tag-into-statement

(PUP-2703) Make 'tag' be a statement function
Merge pull request #2790 from zaphod42/issue/stable/pup-2816-using-wrong-fake-forge

(PUP-2816) Default forge override in Rakefile
(PUP-2750) Add hierarchical metric ids to profiler

This commit modifies the signature of the
`Puppet::Util::Profiler.profile` method to accept a new argument,
which is basically a "metric id".  The argument takes the form
of an array of strings/symbols, allowing us to group specific sets of
profiling data into hierarchies and report aggregate profiling
statistics at any level of the hierarchy.

It also adds a new profiler, `Aggregate`, which extends the
existing `WallClock` profiler.  The new profiler tracks the
aggregate timing data based on the metric id hierarchy,
and logs a message containing the aggregate data
at the end of the run.
Merge pull request #2776 from Iristyle/ticket/master/PUP-839-FFI-Windows-Security

(PUP-839) FFI Puppet::Util::Windows::Security
(PUP-839) Update deprecation notice

The proper notice should be with_process_token and not
get_process_token.
(PUP-2663) Adjust regexp to only match complete string, and not \n

\s includes newline when ^$ is used.
^$ skips leading and trailing optional matches
\A\z does not skip as they force matching of strings start/end