(#16856) Add type model, factory, and calculator.

This is the initial check in of a type model, a factory and
a type calculator that can answer question about types (assignable?,
commonality), and infer type given an instance.

The type model is required by the bindings model.
(#16856) Add bindings model and bindings factory.

This is w.i.p and only somewhat tested code.
(#16856) Adds unit tests to Puppet::Pops::Types
(#16856) Add w.i.p on binder
(#16856) Make type calculator infer PType for types and PType

The infer method did not handle inference of a type (it resulted
in a Ruby type with reference to the type class).

This commit updates the type calculator with an infer of PObjectType.
This means that all types, including the meta-type PType is typed
as PType. Tests added.

(This is all esoteric, but needs to be done correctly).
(#16856) Add infer_Class to remove requirement to pass an instance.

Without this it is more difficult to create a type for a class.
(#16856) Add skeleton of BindingsChecker.

This adds w.i.p on a BindingsChecker - a validator of a bindings
model. It contains:
- Issue module
- Checker/Validator
- TypeFactory method to create a PCollectionType (used in checker)
- Additions to Bindings model (multibind producers)
(#16856) Make a clear distinction between types and instances of types

This commit adds two public methods to the TypeCalculator and a slew
of more unit tests. It also changes the behavior of the assignable?
method slightly to make it more stringent about types and instances.

The new method instance?(t, o) answers the question "is the object o
an instance of the Puppet Type t". This method is necessary since
the assignable?(t, t2) method no longer infers the type of its
second argument. Instead it will always assume that both arguments
are either Puppet types or ruby classes and it will convert any ruby
class into its corresponding Puppet Type using the new method
for_ruby_class(c).

This new method returns the Puppet Type for the given Ruby class. It
will return PType for the ruby class 'Class' and 'Array' and 'Hash'
are assumed to be array of data and hash with literal keys and data
values.
(#16856) Rename #from_ruby_class to #type

The name "type" reads better with the other method names. Later it will
be able to produce the type of a PType (which plays the same role in the
puppet typesystem).
(#16856) Update TypeFactory to use TypeCalculator.type(c) for class.

The previous implementation did the wrong thing for classes that are
mapped to distinct Puppet types. It now relays to the
TypeCalculator.type when calling TypeFactory.ruby(o) with a class (as
this is the most common case).
(#16856) Treat all Ruby Integer values as PIntegerType

The Puppet Type System will treat all Ruby Integers as PIntegerType
regardless of if they are Fixnum or Bignum since the boundary between
those two depends on the architecture. A fixnum might be limited to
31 bits in which case anything larger than that will be bignum.

A bignum may potentially be larger than 64 bit. Integers that large
are currently not supported.
(#16856) Add the first cut of the Binder.

This implementation processes:
- effective categories
- bindings in layers

and produces a Hash[Key, InjectorEntry] that can be fed to an Injector.
(#16856) Add first cut of Binder.

This is the first cut of the Binder which is configured from bindings
data. Once configured it is used to instantiate an Injector (t.b.d).
(#16856) Add w.i.p on injector
(#16856) w.i.p bindings model and injector (stash)
(#16856) Corrects typos and renames classes in Bindings model.
(#16856) Move reusable validation factory semantics to a common super class

This is in preparation for creating a BindingsValidatorFactory. The
common super class removes the need for copying behavior from the
current ValidatorFactory.
(#16856) Fix structure of require statements to make binder package loadable

With this commit, all pops related files are required in the
pops.rb file. The types.rb was removed since it was no longer
needed.
(#16856) Improve documentation of Factory and typographic code changes.
(#16856) Add work that has the wanted design of producers (incomplete).