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".
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.
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).
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.
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.
Merge pull request #31 from zaphod42/feature/binder

Check looked up type against provided type in lookup()