Use PixelBuffer objects as the interface for encoders and decoders

This avoid a lot of unnecessary middle men. This also pushes the
responsibility for pixel format conversion into the encoders and
decoders. The new bufferFromBuffer() is used for direct conversion,
rather than PixelTransformer/TransImageGetter.
diff --git a/common/rfb/tightDecode.h b/common/rfb/tightDecode.h
index a596311..53dbba7 100644
--- a/common/rfb/tightDecode.h
+++ b/common/rfb/tightDecode.h
@@ -77,7 +77,7 @@
     } else {
       pix = is->READ_PIXEL();
     }
-    handler->fillRect(r, pix);
+    pb->fillRect(serverpf, r, pix);
     return;
   }
 
@@ -153,7 +153,7 @@
 
   PIXEL_T *buf;
   int stride = r.width();
-  if (directDecode) buf = (PIXEL_T *)handler->getRawBufferRW(r, &stride);
+  if (directDecode) buf = (PIXEL_T *)pb->getBufferRW(r, &stride);
   else buf = (PIXEL_T *)conn->reader()->getImageBuf(r.area());
 
   if (palSize == 0) {
@@ -225,8 +225,8 @@
     }
   }
 
-  if (directDecode) handler->releaseRawBuffer(r);
-  else handler->imageRect(r, buf);
+  if (directDecode) pb->commitBufferRW(r);
+  else pb->imageRect(serverpf, r, buf);
 
   delete [] netbuf;
 
@@ -253,9 +253,9 @@
 
   // We always use direct decoding with JPEG images
   int stride;
-  rdr::U8 *buf = handler->getRawBufferRW(r, &stride);
+  rdr::U8 *buf = pb->getBufferRW(r, &stride);
   jd.decompress(netbuf, compressedLen, buf, stride, r, clientpf);
-  handler->releaseRawBuffer(r);
+  pb->commitBufferRW(r);
 
   delete [] netbuf;
 }