Avoid updating button style every tick

[#60113594]

This doesn't appear to make anything any faster (at least, not in already-fast browsers...it may help in slower browsers) but it removes extraneous entries from the Dev Tools timeline view.
detectFontChange: call onchange for every request

[#60614818]

Previously we were ignoring onchange if a request to watch the given font was already in progress. That violates reasonable expectations and just plain leads to chaos and confusion.
Use canvas for numeric view, resize conservatively

[#60614818]

This prevents triggering a relayout during every tick.