Move image encoding logic into a central EncodeManager class

This allows us to apply a lot more server logic
independently of which encoder is in use.

Most of this class are things moved over from the
Tight encoder.
diff --git a/common/rfb/ConnParams.cxx b/common/rfb/ConnParams.cxx
index 36f6daa..cc0a768 100644
--- a/common/rfb/ConnParams.cxx
+++ b/common/rfb/ConnParams.cxx
@@ -22,7 +22,7 @@
 #include <rdr/OutStream.h>
 #include <rfb/Exception.h>
 #include <rfb/encodings.h>
-#include <rfb/Encoder.h>
+#include <rfb/EncodeManager.h>
 #include <rfb/ConnParams.h>
 #include <rfb/util.h>
 
@@ -38,7 +38,7 @@
     supportsContinuousUpdates(false),
     compressLevel(2), qualityLevel(-1), fineQualityLevel(-1),
     subsampling(subsampleUndefined), name_(0),
-    currentEncoding_(encodingRaw), verStrPos(0)
+    preferredEncoding_(encodingRaw), verStrPos(0)
 {
   setName("");
 }
@@ -101,6 +101,11 @@
   memcpy(cursor_.mask.buf, other.mask.buf, cursor_.maskLen());
 }
 
+bool ConnParams::supportsEncoding(rdr::S32 encoding)
+{
+  return encodings_.count(encoding) != 0;
+}
+
 void ConnParams::setEncodings(int nEncodings, const rdr::S32* encodings)
 {
   useCopyRect = false;
@@ -113,7 +118,10 @@
   qualityLevel = -1;
   fineQualityLevel = -1;
   subsampling = subsampleUndefined;
-  currentEncoding_ = encodingRaw;
+  preferredEncoding_ = encodingRaw;
+
+  encodings_.clear();
+  encodings_.insert(encodingRaw);
 
   for (int i = nEncodings-1; i >= 0; i--) {
     switch (encodings[i]) {
@@ -176,7 +184,10 @@
         encodings[i] <= pseudoEncodingFineQualityLevel100)
       fineQualityLevel = encodings[i] - pseudoEncodingFineQualityLevel0;
 
-    if (Encoder::supported(encodings[i]))
-      currentEncoding_ = encodings[i];
+    if (EncodeManager::supported(encodings[i]))
+      preferredEncoding_ = encodings[i];
+
+    if (encodings[i] > 0)
+      encodings_.insert(encodings[i]);
   }
 }