(PUP-4483) Add NotUndef type to the Puppet type system
This commit adds a new NotUndef type. The purpose of this type is
to constrain its contained type so that it is not assignable from
the Undef type. The contained type is optional and defaults to
Any.