Provide a better R/W base PixelBuffer class

Clearly separates the read API from the write API
and also from actual implementation.
diff --git a/vncviewer/Viewport.cxx b/vncviewer/Viewport.cxx
index d1d5162..70964b7 100644
--- a/vncviewer/Viewport.cxx
+++ b/vncviewer/Viewport.cxx
@@ -229,6 +229,7 @@
     pixelTrans->translateRect(pixels, r.width(),
                               rfb::Rect(0, 0, r.width(), r.height()),
                               buffer, stride, rfb::Point(0, 0));
+    frameBuffer->commitBufferRW(r);
   } else {
     frameBuffer->imageRect(r, pixels);
   }
@@ -244,6 +245,11 @@
   return frameBuffer->getBufferRW(r, stride);
 }
 
+void Viewport::commitBufferRW(const rfb::Rect& r) {
+  frameBuffer->commitBufferRW(r);
+  damageRect(r);
+}
+
 void Viewport::damageRect(const rfb::Rect& r) {
   damage.assign_union(rfb::Region(r));
   if (!Fl::has_timeout(handleUpdateTimeout, this))