(PUP-3201) Treat :undef as PNilType

For PUP-2857 :undef was changed from being a PNilType to a PRuntimeType.
This stopped the undef literal in the language from being able to be
assigned to Optional parameters. However, this only happened when the
undef was the default expression for the parameter.
Merge pull request #3194 from zaphod42/issue/stable/pup-3201-undef-not-working

(PUP-3201) Treat :undef as PNilType