(maint) Add Optional Type

To be able to more easily deal with undef (not matched by default
except by Data) the convenience type Optional is introduced with
the same semantics as Variant[T, Undef] (i.e. undef/nil) is accepted
instead of real type).
(maint) Add support for Optional in TypeParser and TypeFactory
(maint) Make handling of undef more strict as a type

instace? should not return true for undef for all types. This
means that [undef] =~ Array[Integer] is false. The Data type
was relaxed to still accept undef/nil everywhere except as a key in
a hash.
(maint) Make injector accept undef/nil when doing type checking

Since types are now restrictive, the injector must tolerate undef
as instance (i.e. since it means 'not found').
(maint) Fix several issues with type system implementation

The type system implementation and tests had several flaws.
* Tests did not call expect/should and did not assert
* Undef handled wrong wrt. instance_of
* String allowed parameterization with string values (useless). Can now
  instead be parameterized with a size constraint
* Collection, Array, and Hash can now be parameterized with size
  constraint.
* Data type made lenient allowing undef in constructs
Merge pull request #2194 from hlindberg/maint_undef-not-correctly-handled-in-type-calculator

(maint) undef not correctly handled in type calculator
(maint) Add support for creating the PType (metatype) in type factory

This method was missing.
(maint) Add support for Type[T] in access operator

This makes it possible to parameterize a Type from the Puppet Language.
e.g. support:

    Integer =~ Type[Integer]  # true
(maint) Add test of Type[T] access operator.
(maint) Add support for Type[T] in TypeParser

This makes it possible to go from String form to Type.
(maint) Add support for Ruby['classname'] in access operator.

There were also several problems since the existing behavior
did an inference of the type parameter thus always arriving
at Ruby[String]. From the Puppet Language, the parameter is
always a String containing the class name.
(maint) Add test for Ruby['classname']
(maint) Add support for Ruby['classname'] in type parser

This makes it possible to convert from Ruby type in string form
to a RubyType.
(maint) Add support for Collection[<size constraint>] to type parser

The type parser testd that Collection[from,to] resulted in error
while this is supported as an access operation. Should have been
the same in both places.

This allows a Collection in string form to have type parameters for
the size constraint.
(maint) Correct assignable? for Type without type parameter

The expression Type[Integer] =~ Type should produce true but did not
since it only considered the parameterized case.
(maint) Add test for Type[Type[x]] instance? operations

There were no testing of meta type matching when there is meta
type regression (the type of the type of the...)
Merge pull request #2197 from hlindberg/maint_type-type-not-handled-correctly

(maint) the type type not handled correctly, and other type system adjustments
(maint) Add temp workaround for travis

Rubygems broke travis builds on ruby 1.8.7:

https://github.com/travis-ci/travis-ci/issues/1793
https://github.com/rubygems/rubygems/pull/763

This patch is a temporary workaround until rubygems is
updated.
WIP