(maint) Add 3x function doc stub for 4x function reduce
(maint) Add 3x function doc stub for 4x function slice
(maint) Update function 'with's documentation with an example
(maint) Add 3x function doc stub for 4x function with
(maint) Remove dead test code
(maint) Fix stylistic issues from review
(PUP-2755) Remove special handling of iterative functions / cleanup

This fixes comments from review. It also removes the special
handling of the iterative functions (special case to avoid
having their arguments transformed) as this is no longer needed.
(maint) Fix stylistic issues from review of PUP-2755
(PUP-2791) Update docs for EPP syntax

The syntax for declaring parameters to EPP changed before it was merged
from <%- ($x) -%> to <%- |$x| -%> to make it consistent with the lambda
syntax. The docs on the epp and inline_epp functions still referenced
that old syntax. This updates those docs.
(PUP-2755) Mark function stubs as rvalue

The function stubs that are left in place to allow "puppet doc" to
document the new functions were supposed to issue an error when they are
used under "--evaluate current", but you couldn't call them in their
normal fashion because they were not specified as :rvalue functions,
which they used to be. This puts the rvalue flag back on so that if they
are called then they can produce the intended error message.
Merge branch 'pr/2765'

* pr/2765:
  (PUP-2755) Mark function stubs as rvalue
  (PUP-2791) Update docs for EPP syntax
  (maint) Fix stylistic issues from review of PUP-2755
  (PUP-2755) Remove special handling of iterative functions / cleanup
  (maint) Fix stylistic issues from review
  (maint) Remove dead test code
  (maint) Add 3x function doc stub for 4x function with
  (maint) Update function 'with's documentation with an example
  (maint) Add 3x function doc stub for 4x function slice
  (maint) Add 3x function doc stub for 4x function reduce
  (maint) Add 3x function doc stub for 4x function match
  (maint) Add 3x doc function stub for 4x function map
  (maint) Add 3x function doc stub for 4x function filter
  (maint) Add 3x function doc stub for 4x function each
  (maint) Add doc stub for 4x function assert_type
  (PUP-2755) Fix issues after changes from PUP-514
  (maint) Add leaky local scope tests
  (PUP-2755) Move iterative functions to the new API
  (PUP-1057) Remove the function stubs for collect and select
Merge remote-tracking branch 'upstream/master' into puppet-4

* upstream/master: (26 commits)
  (PUP-2755) Mark function stubs as rvalue
  (PUP-2791) Update docs for EPP syntax
  (maint) Fix stylistic issues from review of PUP-2755
  (PUP-2755) Remove special handling of iterative functions / cleanup
  (maint) Fix stylistic issues from review
  (maint) Remove dead test code
  (maint) Add 3x function doc stub for 4x function with
  (maint) Update function 'with's documentation with an example
  (maint) Add 3x function doc stub for 4x function slice
  (maint) Add 3x function doc stub for 4x function reduce
  (maint) Add 3x function doc stub for 4x function match
  (maint) Add 3x doc function stub for 4x function map
  (maint) Add 3x function doc stub for 4x function filter
  (maint) Add 3x function doc stub for 4x function each
  (maint) Add doc stub for 4x function assert_type
  (maint) Refactor EvaluatingParser to use IssueReporter
  (maint) Disable future parser warnings based on :disable_warnings
  (PUP-2557) Issue deprecation warning for AST::Node inheritance
  (PUP-2755) Fix issues after changes from PUP-514
  (maint) Add leaky local scope tests
  ...
Merge pull request #2666 from ffrank/maint/eliminate-type-doc-todos

(maint) Resolve some documentation TODOs in Puppet::Type
(PUP-2727) Make new keywords acceptable as attribute names.

Puppet allows keywords as attribute names in defines and
parameterized classes. This was missing for the added keywords:
* FUNCTION
* ATTR
* PRIVATE
* TYPE

Which caused a clash with existing types.

This commit adds the new keywords to the list of accepted words
in the grammar.
(PUP-2758) Add micro benchmark(s) task

This adds a benchmark that runs a series of puppet manifests that
are measured individually for parse and evaluation time. Each
manifest is measured 100x each for parse and evaluation. The benchmark
total time includes running all of them (including overhead of
measuring the details). Details are output as average of all runs
per detail where parsing and evaluating is output as separate entries.

The sample file written is for the total average.
(PUP-2758) Add passing arguments (warm_up and detail) to Benchmarker.run

Arguments are needed to be able to run one detail of a benchmark.
The evaluations benchmark makes use of this, all others ignore the
arguments.
(maint) Correct typo in loader helper class and add tests

Loading the same function multiple times from modules caused
an error because of a typo in NamedEntry. This adds tests for the
helper classes basic functionality, and adds tests that loaders indeed
can load a function more than once.

This also corrects error handling (yet another typo) when a function was
redefined (the wrong method was called).
(PUP-2758) Add calls to 3x, 4x, and namspace 4x functions to evaluations

This adds additional benchmarks for function calls using 3x calls,
4x calls in global namespace, and name spaced to a module.

A simple assert_type benchmark is also added (one simple type check).
Merge pull request #2748 from hlindberg/PUP-2727_keywords-clash-with-attributes

(PUP-2727) Make new keywords acceptable as attribute names.
(PUP-2758) Generate tasks with arguments defined by benchmark

This makes it possible for a benchmark scenario that wants
additional details to run a smaller portion of the benchmark to
configure these by defining a class called BenchmarkerTask (currently
only used by the evaluations benchmark). The separation from the
Benchmarker class is that this class is loaded when rake generates a
list of tasks, and it is not wanted to load each full benchmark in turn
to generate this list. (Over time, the BenchmarkerTask can be expanded
on to perform other task generation duties).

It is now possible to run all of the evaluations benchmarks,
profile all, run one particular micro benchmark, or just its parse or
evaluation part by suffixing the name with _parse or _eval. As an
example rake benchmark:evaluations:run[assert_type_eval] runs only the
evaluation part of the assert_type micro benchmark in evaluations. (This
is especially useful when running profiling.

For profiling, the parameter warm_up_runs is always included.