Merge pull request #2750 from hlindberg/PUP-1852_deprecate-search-function

(PUP-1852) Deprecate the 'search' function.
Merge remote-tracking branch 'upstream/master' into puppet-4

* upstream/master: (88 commits)
  (PUP-2682) Allow trailing comma after node matches
  (PUP-2521) Remove windows-pr mixins from daemon
  (PUP-2521) Define Process constants locally
  (PUP-2521) Don't use windows-pr constants
  (maint) Set Travis CI to run two spec runner processes.
  (PUP-2843) Fix INVALID_HANDLE_VALUE on Windows x64
  (PUP-2842) Limit platforms on which we install ruby-prof
  (PUP-2382) Remove 'win32/api' requires
  (PUP-2828) Select the branch of puppet-win32-ruby to install
  Revert "Merge branch 'pr/2801'"
  (maint) Use an absolute path so we're not sensitive to pwd
  (PUP-2828) puppet-win32-ruby acceptance ver config
  (maint) use compiler in crontab integration spec
  (PUP-2828) Pin to 1.9.3 branch of vendored ruby on Windows
  (maint) Make loaded 4x functions debuggable
  (MAINT) Small openbsd package spec tweaks
  (maint) Disable timesyncing for acceptance tests
  (maint) Eliminate duplicate constant warning
  (PUP-1283) win32-security gem raises a different exception
  (PUP-2750) Fix aggregate profiler spec tests on windows
  ...
Merge pull request #2751 from hlindberg/PUP-2741_remove-search-function-from-puppet-4

(PUP-2741) remove search function from puppet 4
Merge pull request #2781 from hlindberg/PUP-2798_Stop-reserved-word-warning-3x

(PUP-2798) Remove warnings for reserved words in 3x regular.
(maint) Fix microsoft_windows feature to return false instead of nil.

Fixing Puppet.features.microsoft_windows? to return false instead of nil.
(maint) Remove unnecessary facter stub in compiler_spec.rb.

Removing an unnecessary facter stub.
The stub is incorrect as value does not return a Fact object.
The correct stub is used below.

Also removing redundant require of puppet/rails.
(PUP-2104) Add cfacter setting to enable cfacter implementation.

Adding a --cfacter setting that will replace the facter implementation
with the native facter implementation if the following conditions are
met:

* cfacter is installed
* the version of cfacter is at least 0.2.0 (not yet released).
* facter has not evaluated any facts by the time the setting is set.

To accomplish this last point, certain default setting values needed to
be delay-evaluated as they relied on facts. Therefore a :default
for a setting now accepts a Proc and calls the Proc only once when the
default value is needed.
Merge pull request #2811 from peterhuene/alternative/facter

(PUP-2104) Add cfacter setting to enable cfacter implementation.
(maint) Fix Pattern / Variant Type assignability

This fix corrects Pattern.assignable?(Variant) which was not
correctly supported in the type calculator. (It gave up if t2
was not a String or an Enum). Now, if t2 is a Variant,
the check recurses to the types described by the enum.
(maint) Fix Enum / Variant assignability

The type calculator did not correctly compute assignability
for an Enum when assigning a Variant type. Now, all variants
are checked if they are assignable to the enum type.
Merge pull request #2789 from hlindberg/PUP-1811_in-set-match-vars

(PUP-1811) Make 'in' set match vars when regexp is used to match
(maint) Fix problem with Enum subset not matching Enum

This corrects a problem where Enum[a] was not assignable to
Enum[a,b], since it is a subset, it should be assignable.
(maint) Add the ability to inject calling scope into function.

The InteralFunction API now has the ability to "inject" and weave
the calling scope into the dispatched arguments by calling
the method scope_param() when building the dispatcher.
(PUP-2845) Move the epp function to the 4x function API.

This moves the epp function to the new function API.
The type checking is much approved as a consequence as the function
is now protected against spilling non variable name compliant
variables into the scope.
(maint) Extract constant for name separator

The name separator is used a few different times in the file. This
extracts it out and freezes the value, which has the nice benefit of a
small speed boost. Unfortunately this isn't a big win for the system
since this code path is only really used for error conditions.
(doc) Describe ca subcommands in puppet help

PUP-2801 requests ability to remove pending CSRs. The requester confirmed
that the puppet ca destroy command met that need. This patch adds basic
descriptions to puppet help ca for destroy, revoke, generate, sign,
print, fingerprint, and verify. The descriptions are largely sourced from
the puppet help cert descriptions of the same functionality.
Merge branch 'pull-2783'

This closes GH-2783.
Merge branch 'master' into puppet-4
Merge branch 'pr/2810'

* pr/2810:
  (maint) Extract constant for name separator
  (PUP-2654) Capitalize each segment of a resource type "label"
(PUP-2845) Move the inline_epp function to the new function API.

This moves the function inline_epp to use the new function API.
This also improves the argument checking since it is not not possible
to leak non variable name compliant variables into the scope.