add detectFontChange to test font loading

[#57816104]

The cached textures for atoms with charge labels are often created before our custom @font-faces load. This resulted in charge labels being drawn using the fallback font (Chrome, Firefox) or with no visible label (Safari). The usual solution for detecting the completion of font loading, in the absence of working CSS font loader spec implementations, is to detect changes in the size of a div containing some text with the specified font. However, this approach was failing in Safari because Safari appears to relayout using the *metrics* of the downloaded font, once it has them, while it creates the actual glyphs in the background--very briefly, the page as painted has no visible text.

This meant that even if we recreate our atom textures after a typical font-loading detection library reports that our custom fonts have loaded, our textures may still have no visible labels.

The function implemented here uses the 2d Canvas' .toDataURL() method to determine when a given font, *as rendered to an actual canvas element*, changes in appearance.
Re-render charge labels when font loads

[#57816104]

Uses our custom detectFontChange to make sure this happens after the font glyphs are actually available, not just when the font metrics change--in Safari at least, these apparently may occur at two different times.