Empty reflected attributes and string literals in extended attributes.

Encoding the CORS setting attribute

  http://www.whatwg.org/specs/web-apps/current-work/#cors-settings-attribute

as a reflected attribute exposed a missing piece in our reflected
attribute handling: attributes that are empty (no value) can
separately be mapped to an attribute state. Upon reflection via its
IDL attribute, that state must then be mapped to its canonical
value/keyword.

Support the expression of this through the setting of
[ReflectEmpty="value"].

Separately, but also induced by CORS attributes, an attribute value
may contain non-identifier characters (as defined by WebIDL), which
makes identifiers not a perfect fit for specifying these reflected
attribute values (the use of "-" being the direct problem for CORS
attribute values.)

To address, extended attributes can now take string literals on their
right hand sides (e.g., [Attr="B"|"C"|"D"].) Attribute value lists
provided with [ReflectOnly=<list>] can then contain the wider range of
characters.

To go with that, the [ReflectEmpty], [ReflectMissing] and
[ReflectInvalid] attributes can also be given string literals on their
right hand side, e.g.,

  [ReflectEmpty="Value1", ReflectInvalid="Value2"]

The string literal must match one of the values in the [ReflectOnly]
list.

R=haraken,nbarth
BUG=331694

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

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