Render on a temporary surface when needed

Some platforms draw directly to the screen, which means that updates
will flicker if we draw multiple layers. Prevent this by first
composing the update on a hidden surface.
diff --git a/vncviewer/DesktopWindow.h b/vncviewer/DesktopWindow.h
index d0e2eae..073be66 100644
--- a/vncviewer/DesktopWindow.h
+++ b/vncviewer/DesktopWindow.h
@@ -30,6 +30,7 @@
 namespace rfb { class ModifiablePixelBuffer; }
 
 class CConn;
+class Surface;
 class Viewport;
 
 class Fl_Scrollbar;
@@ -95,6 +96,7 @@
   CConn* cc;
   Fl_Scrollbar *hscroll, *vscroll;
   Viewport *viewport;
+  Surface *offscreen;
 
   bool firstUpdate;
   bool delayedFullscreen;