Add a cache to getPublicQualifiedName().

After running the racing demo for one lap, this cache has 252 entries
and a 99.87% hit rate, and has reduced the cumulative JS allocations by
about 15%.
Add and use efficient string concatenation functions.

This patch modifies most of the string concatenations that show up in
race.swf and slime.swf as causing more than 1 MiB of allocations.
Merge pull request #1614 from tschneidereit/master

Properly remove Loaders from the global Loader processing queue
Avoid calling isNumericString() from isNumeric().

Most calls to isNumeric() are for identifiers, and isNumericString()
ends up being called, which is expensive because it creates a new
string.

This patch adds a simple check that avoids the need to call isIndex()
and isNumericString() in these cases. This avoids 10s of MiBs of
allocations per lap in the racing demo.
Merge pull request #1588 from nnethercote/avoid-isNumericString

Avoid calling isNumericString() from isNumeric().
Merge pull request #1587 from nnethercote/cache-get-public-qname

Add a cache to getPublicQualifiedName().
Merge pull request #1595 from nnethercote/concatN

Add and use efficient string concatenation functions.
Merge pull request #1615 from tschneidereit/master

Fix loading of external resources in Firefox
Fix bug in handling of 5 arguments in Path2D polyfill's _writeData method

Plus assert that the method is only called with expected argument counts.

Fixes #1616.