Support translation of runtime type literals to closure id generators

Background:
Google uses a system of Javascript diffing and patching called DeltaJS.
This works by storing old copies of previous build versions and
computing vcdiffs between the JS layout, sending only the changed JS
to the client.

In order for this to work efficiently, GWT's output needs to be stable,
and it needs to be run through Closure Compiler to rename variables
according to Closure's Stable-Renaming-Map. This ensures new builds get
the same obfuscated identifiers as previous builds.
JRuntimeTypeLiterals currently either translate to strings, or to
numeric type ids. This patch adds a third option equivalent to using
strings which are replaced by the Closure Compiler with a more
compact representation.

See https://code.google.com/p/closure-compiler/wiki/IdGeneratorAnnotations

When this mode is enabled via -XclosureFormattedOutput, and JsInteropMode
is JS, a runtime type like 'Serializable' will be written in
cast maps and instanceof expressions as
jsinterop.closure.getUniqueId('Serializable')

After Closure Compiler compilation, this will be replaced with a short
static string that is stable across compilations.
Note that usage of this requires your linker to provide an implementation
of jsinterop.closure.getUniqueId

This is highly experimental and specialized for use by internal hybrid
Closure/GWT apps, so it is not recommended for use and will eventually
be replaced by a more official mechanism for GWT and Closure to
operate together.

This patch was originally reviewed in
https://gwt-review.googlesource.com/#/c/10350/

Change-Id: I7e965f4627af027a9e82352b2f316edb3fc72efa