Use HTML5 <canvas> for drawing operations.

This removes most of my hand-done pixel manipulation stuff.
And that's a good thing.

This lets us have things like circles, gradients, proper font
rendering, and all those good things. The new default badge
style is now more akin to what one might find on other platforms.

Also, we now support high-DPI resolution settings a bit more
gracefully. Unfortunately we don't have access to the proper
channels for determining the icon size, so we have to do it
the hard way.
Fix high-DPI computation. Fix badge coloring.

DPI: Need to Math.floor the whole thing, not the ratio.

Colors: Draw as a flat color, then overlay a gradient.
this keeps us from needing to try and compute the begin/end
colors ourselves.
Memoize icon size.

Also get rid of some commented-out stuff that I don't need anymore.