Fix #422: Add js.UndefOr[+A] type to represent A | js.prim.Undefined.

This type is an unboxed representation of *either* an A *or* the
JS undefined value. It offers an Option-like interface.