(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
Merge pull request #3359 from hlindberg/PUP-659_optimize-qualified-variables

(PUP-659) Optimize qualified variables