Split decoders into a read and decode step

We need to split these steps up in preparation for multi-core
support. Reading needs to be done in a serial manner, whilst
decoding can be done in parallel.

This also involved a rather large cleanup of the Tight decoder.
diff --git a/common/rfb/DecodeManager.cxx b/common/rfb/DecodeManager.cxx
index b82d31d..ffae18b 100644
--- a/common/rfb/DecodeManager.cxx
+++ b/common/rfb/DecodeManager.cxx
@@ -26,6 +26,7 @@
 #include <rfb/LogWriter.h>
 
 #include <rdr/Exception.h>
+#include <rdr/MemOutStream.h>
 
 using namespace rfb;
 
@@ -35,12 +36,14 @@
   conn(conn)
 {
   memset(decoders, 0, sizeof(decoders));
+  bufferStream = new rdr::MemOutStream();
 }
 
 DecodeManager::~DecodeManager()
 {
   for (size_t i = 0; i < sizeof(decoders)/sizeof(decoders[0]); i++)
     delete decoders[i];
+  delete bufferStream;
 }
 
 void DecodeManager::decodeRect(const Rect& r, int encoding,
@@ -60,5 +63,11 @@
       throw rdr::Exception("Unknown encoding");
     }
   }
-  decoders[encoding]->readRect(r, conn->getInStream(), conn->cp, pb);
+
+  bufferStream->clear();
+  decoders[encoding]->readRect(r, conn->getInStream(),
+                               conn->cp, bufferStream);
+  decoders[encoding]->decodeRect(r, bufferStream->data(),
+                                 bufferStream->length(),
+                                 conn->cp, pb);
 }