Reimplement java.lang.String with JS Strings.

In another recent change, for *Classes.prototype.getField* and *Classes.prototype.getMethod*, we started prefixing field and method signatures with a character to signify whether or not they're static. The static ones are prefixed with "S", while the non-static ones are prefixed with "I".

So the signature for a static int field looks like `S.fieldName.I`, while a non-static int field looks like `I.fieldName.I`. And a static method with no params or return value looks like `S.methodName.()V`, while a non-static one looks like `I.methodName.()V`.

I wonder if we should do something like that here, as it would obviate the need to have a third `opts` parameter, although it would mean changing the way the VM looks up overrides.