(PUP-2904) Make functions 4 API require symbol param names

There was a mix of String and Symbol in our code. This enforces
that parameter names must be Symbol. Thus it is up to the caller to
use the right thing as this is better than performing an intern
(performance and may intern something big/bad).
(PUP-2904) Correct documented type of the name param

The documented type of the parameter name in the param method
was still showing 'String' when it is now required to be a Symbol.

This commit corrects the documentation comment.
Merge pull request #3360 from hlindberg/PUP-2904_consistent-func-api-wrt-param-names

(PUP-2904) Make functions 4 API require symbol param names
(PUP-659) Remove ability to have multiple names in a scope

This removes the ability for a scope to have multiple namespaces.
The mechanism was not used for anything productive and resulted
in performance overhead.

This also removes serching through multiple namespaces (given
by a scope, as well as all wider namespaces of a given name). This
was also not used because references are now always exactly to
the referenced element (except for variables which are handeld a
different way).

There were many tests that tested the implementation of the
TypeCollection class and its support for features that were not used.

There will be additional cleanup in this area, such as changing the
API.

This commit makes it just as fast to reference with names that are not
using an initial :: as it is without. Before this change references
without :: took 1.5x as long.
(PUP-659) Change find class/define API by removing unused args

This removes the parameters for an array of namespaces to search
as well as the options (where it was possible to pass an assume_fqname
option with special meaning).

No the api is much simpler - lookup the name that is wanted; no more, no
less. It should be given in the correct form (downcased), but it may
start with '::'.
(maint) Clean up stale comment regarding < 3.5.0 implementation
(PUP-659) Remove fully_qualified flag from compiler evaluate classes

The method evaluate_classes had a flag (added in 2012 to work around
a problem with relative names) that after removal of relative
adressing had no effect.

This commit removes the extra flag.
(maint) Remove overly complex code in resource/type/parent_type

The logic in this method was overly complex, dealing with cases
that are irrelevant in Puppet 4.0 since node inheritence has
been dropped (that seemed to be the reason judging from a
TODO: comment).
(PUP-659) Optimize debugging calls

This optimizes debugging calls by allowing it to be called
with a block. This optimization is good because many calls
to Puppet.debug needs interpolation of a long string. This
(and internal housekeeping in the debug method) can be
completely avoided if puppet is not running for debugging.

By changing a call like this:
    Puppet.debug("This interpolates #{x} and #{y}")
to
    Puppet.debug{"This interpolates #{x} and #{y}"}

Reduces the cost to 40% of the original and more if the string is
longer, or has more interpolation/method calls involved to get
the values via a getter etc.

A call to debug_once should be guarded with a check if Puppet is
debugging (one such change was made).
(PUP-659) Fix tests after rebase

Tests were added/modified that passed an empty name space to
the find_definition method and this method is changed in the optimized
version.
(PUP-659) Remove commented out code
(maint) Add qualified variable lookup benchmark

This commit adds a benchmark to test the compilation of many qualified
variable lookups in a manifest.
Merge pull request #3406 from briancain/maint/master/add-qual-var-lookup

(maint) Add qualified variable lookup benchmark
Merge pull request #3359 from hlindberg/PUP-659_optimize-qualified-variables

(PUP-659) Optimize qualified variables