restructured canvas rendering calls

renderCanvas is now renderFrame, and normal rendering of the current
frame (such as when we switch to a new frame, change the current frame,
or re-show the preview dialog) now goes into a new drawPreview() method
renderFrame optimizations/refinements

renderFrame now takes a fillStyle parameter, which removes some extra
logic from this specific method and makes it more modular for previews
of other colors (such as onion-skinning).  In addition, we can make some
safe assumptions about the radius of any LEDs getting rendered, so that
also takes out some extra rendering logic.
moved canvas calculations to ProgData constructor
JSDocced remainder of ProgData
implemented onion-skinning (fix #6)