(PUP-514) Add support for optionally typed parameters.

This adds optional type annotations to Classes, Defines, Lambdas, and EPP
templates. The types available are (not an exhaustive list) Integer, String,
Object, Variant[x, y, ...], Optional[x], Type[x], etc. Variant is a union type
that allows specifying that the allowed type is any one of the given types.
Optional is needed to allow undef (type Undef) to be used since the standard
types (String, Integer, etc.) do not allow undef to be assigned. This means
that Undef is not a bottom type.

Epp templates do not support "captures rest" arguments (`*$x`) and so there is
now a check to issue an error when that is encountered.
yes, remember that the create_local_scope pushes a new ephemeral on the stack internal to the scope, and what it calls may in turn push new scopes