syscall/js: improve Value.String() for non-string values
This change modifies Value.String() to use the following
representations for non-string values:
<undefined>
<null>
<boolean: true>
<number: 42>
<symbol>
<object>
<function>
It avoids JavaScript conversion semantics in the Go API and lowers the
risk of hidden bugs by unexpected conversions, e.g. the conversion
of the number 42 to the string "42". See discussion in #29642.
This is a breaking change, which are still allowed for syscall/js.
The impact should be small since it only affects uses of
Value.String() with non-string values, which should be uncommon.