THRIFT-3765 fix memory leak in python compact protocol extension

This closes #970
diff --git a/lib/py/src/ext/protocol.tcc b/lib/py/src/ext/protocol.tcc
index 2f0d083..6e978d7 100644
--- a/lib/py/src/ext/protocol.tcc
+++ b/lib/py/src/ext/protocol.tcc
@@ -418,19 +418,24 @@
   }
 
   case T_STRING: {
+    ScopedPyObject nval;
+
     if (PyUnicode_Check(value)) {
-      value = PyUnicode_AsUTF8String(value);
-      if (!value) {
+      nval.reset(PyUnicode_AsUTF8String(value));
+      if (!nval) {
         return false;
       }
+    } else {
+      Py_INCREF(value);
+      nval.reset(value);
     }
 
-    Py_ssize_t len = PyBytes_Size(value);
+    Py_ssize_t len = PyBytes_Size(nval.get());
     if (!detail::check_ssize_t_32(len)) {
       return false;
     }
 
-    impl()->writeString(value, static_cast<int32_t>(len));
+    impl()->writeString(nval.get(), static_cast<int32_t>(len));
     return true;
   }