Make getCanonicalName handle $ correctly.

Class.getCanonicalName was treating '$' in the name as inner class
separators notably failing if the class actually contained a
'$' in its name.

Bug: issue 8905.
Change-Id: I1ba923925d60ddc5712cad0b29ac270497397b5f
Encode compound name as a string in Class.createFor.

Encodes the compound name of a class (i.e. a list of simple class
names that represent the outer to inner class chain) as a '/' separated
string instead of as an array at runtime so that it does not interfere
with closure string obfuscation.

Change-Id: I7e10ff074a9cf259b4bb6dda5d6a5c957bfb7db3
Clean up scope for property providers.

Make sure that property providers can only see variables
that we've explicitly exported to them.

Introduce __gwt_isKnownPropertyValue for property providers.

Change-Id: I044d2763c16e24960d079dbd40d46fffc485ecf9
(cherry picked from commit 18b7776717894fb17b73c8fbb4d97936d631260d)