IDL: Support optional union type arguments with default values

Since union container types have setters rather than assignment operators,
restructure the default value handling to generate a C++ expression that
sets the value instead of the value as a C++ literal expression.

And as a special case, since union containers are null initially, if the
default value is null, generate an empty expression then.

This also fixes a minor bug in the union handling: enum types were not
supported. They should be treated as string types, including conflicting
with any other string type in the union.

BUG=240176

Review URL: https://codereview.chromium.org/713683003

git-svn-id: svn://svn.chromium.org/blink/trunk@185046 bbb929c8-8fbe-4397-9dbb-9b2b20218538