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).

The Puppet::Pops::Types::TypeParser class does not yet support parameterized
types, which only allows it to support literal values. Collections will be
completed next.