Viewport pipeline: first stage of subpixel coordinate support complete

Subpixel work is not yet finished, but I've rewritten all of stage 2 -
and the central compositor! - to operate on floating-point coordinates
instead of integers.  This required the creation of some novel functions
(like floating-point rect intersection, which GDI+ does not actually
support, oops).

This is a good place to set a placeholder commit, because viewport
rendering remains fully functional.  My next step is to start replacing
GDI drawing functions with GDI+ equivalents, which has some performance
implications but is unavoidable for subpixel support.  I'm hoping I can
offset any performance losses with a new compositing approach, which
won't require the use of intermediate DIBs unless non-destructive
effects are active.  This will also be a great chance to make some
changes to the compositor to prep for paint tools (which require the
insertion of a temporary paint layer into the rendering process).

As this change will require a rather sizable overhaul of the central
compositor (which is a complex piece of code), I'd like a failsafe point
I can retreat to if necessary - hence this commit!