(PUP-3718) Make defined function handle qualified variable names

The defined function can answer if a variable is defined. There
were however no tests for qualified variable names. The implementation,
when given a qualified name simply tried to lookup the complete name
in its own scope which naturally failed.

This commit adds logic to check if a variable is qualified in the
Scope#exist? method, and then mimics the behavior of a variable
lookup by splitting the name, then looking up the class and its scope
and finally delegating the exist? call to that scope.

This is made somewhat complicated when testing due to the fact how
scopes are wired (to find other names scopes). The test that checks for
the existence of a top scope variable now sets this up as if the main
class (called '') had been evaluated.
(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-3680) Remove confusing convenience Hash[value-type]

In an attempt to be helpful, the type system offers a convenience
that if a Hash type is specified with one key, then this is taken
as being the type of the value (and the key type defaults to
Scalar).

In practice this proved to be confusing as it raises the question
about if it is the key type or the value type that is being
specified. Some users thought it was they key type, as that is
what they wanted control over, others thought it was the value type.

From a consistency standpoint (a Hash is a Collection), it could
be viewed as being a collection of Tuple[Key, Value], but implementing
that is not very helpful (it is just more to type). The best solution is
therefore to simply remove the convenience and require both Key and
Value type as a minimum. (This also removes the confusion over the error
if wanting to specify Hash[Value, 2,5] (which fails because 2 is not a
type). Now users have to specify the full type: Hash[Key, Value, 2, 5]
if they want to add min and max entries.
(PUP-1413) Add 'touch' command to Augeas provider

The touch command works like its POSIX namesake, only creating the node in
the Augeas tree when it doesn't already exist, and creating it with a NULL
value.  The behaviour is copied from augtool (augrun).
(PUP-3521) Fix Puppet's exception swallowing

Fix Puppet's exception swallowing by finding places where an
Exception is rescued and swallowed and making their rescues
more granular.
(PUP-3024) Add deltarpm_percentage and deltarpm_metadata_percentage to yumrepo

This patch adds deltarpm_percentage and deltarpm_metadata_percentage to the
yumrepo type.
(PUP-3240) Remove ignoreimport setting

The ignoreimport setting has played out its role since the
import function has been removed.
(maint) Remove obsolete and commented out spec tests for Rdoc support
Merge pull request #3361 from hlindberg/PUP-3680_remove-hash-type-only-value-param-convenience

(PUP-3680) Remove confusing convenience Hash[value-type]
(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.