Preliminary pan/zoom support for preview windows

This commit is a big one, and it implements an entire new backend for
handling pan/zoom support on preview windows.  A toggle is now provided
on the preview control itself, meaning all tool dialogs will
automatically receive these new capabilities.

Unfortunately, as the preview control is now capable of triggering an
event that requires a preview refresh, I must manually revisit every
tool to add event handling code.  I'll work on that over the next week.

Still left to do is specialized handling for images or selections where
one or more edges are smaller than the preview space.  Right now,
nothing changes on these images - the resulting image is always drawn at
"fit-to-preview" dimensions.   Ideally, toggling that setting should
result in a drawn image at 100% zoom...
Fix handling of previews where at least one dimension is smaller than the preview area

Also, a fix to prevent compile-time errors when initializing the preview
user control.
Standardize bits of viewport code to improve rendering accuracy
Additional viewport tweaks
Finish official pan/zoom support for preview windows

Fixes #50.

Every tool capable of supporting pan/zoom support now has it!

Note that *not all tools support this feature*.  Some - like Perspective
Correction and many Distort functions - require knowledge of the full
image area in order to render their effect.  They simply do not render
correctly if they are only given a subset of the image.  On these
specific tools, I have disabled pan/zoom functionality, meaning there
will only ever be a full-image preview available.
Clarify new right-click to select preview color on select dialogs

On tool dialogs that support both pan/zoom and color-selection from the
preview window, I have been forced to differentiate that LEFT CLICKS
drag-to-pan, while RIGHT CLICKS select a color.  Where relevant, I have
clarified this via labels on dialogs where it matters.