(#16856) Fix problems with loading Array and Hash in Hiera2 backend.

The code was untested and had several problems.
(maint) Small docs fixups

The docs for how to use the BindingsFactory where slightly wrong and
indicated you had to create an instance. The factory methods are all
class methods on the BindingsFactory and so instance is needed.
(#16856) Add a lookup() function for injected values

The lookup() function will use the configured bindings and injector to
lookup a value. If one is not found, then nil is returned (which is
undef in the puppet language). Any errors from the injector are
propogated out to the caller.
(maint) Prevent error when 'common' is given in the categories.

The category common is predefined and if included in the input
an "attempt to redefine" was raised. Now it ignores the last category if
it is named common. This means that if common is placed at some other
precedence a wanted errors is raised, but never when it is placed last).
(#16856) Add EvaluatingParser, and create injector in Compiler.
(yardoc) Add yardoc to added logic in compiler.
(#16856) Replace use of StringEvaluator with EvaluatingParser

This makes the hiera2 backend more powerful; it can now parse
and evaluate full Puppet Expressions.
The quote method is now Ruby 1.8.7 compliant.

Removes StringEvaluator.
(#16856) Ensure that binder evaluates using Puppet[:parser] = 'future'

This ensure more correct evaluation.
(#16856) Fix Pupet typo
(#16856) Add implicit parameter lookup for hostclass resources.

This adds implicit lookup of host class parameters via injector.
Checks DataBindings (i.e. Hiera) if there is no bound value.

Fixes tests that were mocking scope and did not expect calls to
compiler. Also adds accessor method that creates an injector if none was
created.
(#16856) Add tests for implicit injection.

This adds tests that host class parameters are looked up in the
injector.
Also adds a NullInjectorImpl intended to use in future tests.
(#16856) Delete obsolete lib/puppet/binder*

Cleanup of unused logic.
(#16856) Stringify puppet Booleans as "Boolean"

The stringification logic missed out on the case of Booleans and was
instead stringifying the type as "Literal". This adds boolean support in
the stringification so that it is now stringified as "Boolean".
(#16856) Add type spec parser

This adds a parser for type specifications. At the moment it only
supports unparameterized types (so no collections, only scalar types).
It converts a string of the type specification into the type model.
(#16856) Check looked up type against provided type in lookup()

The lookup() function can now enforce the type that the caller of the
function is expecting to receive by being provided a type specification
as a second argument. If no argument is provided it will default to
needing "Data", which is the supertype of all of the data types (Object
is a supertype, but doesn't not result in getting a looked up value
because the type is also part of a namespace for the injection system
and it holds object separate from data).
(#16856) Remove support for constructing object types

The previous support for constructing object types from the factory was
incorrect and stemmed from my confusion about how Object fit into the
type system of puppet. Object should not be available to most users of
the type system and so is being removed. If this changes in the future,
then it can be put back in.
(#16856) Support parameterized collection types in type specifications

The previous support for type specifications in the language did not
allow for parameterized collection types. This adds support for those
types.
(#16856) Improve BindingsFactory

Improves BindingsFactory by accepting blocks evaluated with instace_eval
w.i.p Puppet::Binder and bindings via Ruby (no tests yet).
(#16856) Add error handling for more invalid forms of type specifications

Since changing to using the full puppet parser the type specifications
would be able to parse, but not interpret, arbitrary puppet expressions.
The error messages in those cases would however only be about not being
able to handle a particular method. This adds checks for those cases and
improves the error messages.
(#16856) Add missing issue