Merge part of the trunk changes into the p3yk branch. This merges from 43030
(branch-creation time) up to 43067. 43068 and 43069 contain a little
swapping action between re.py and sre.py, and this mightily confuses svn
merge, so later changes are going in separately.

This merge should break no additional tests.

The last-merged revision is going in a 'last_merge' property on '.' (the
branch directory.) Arbitrarily chosen, really; if there's a BCP for this, I
couldn't find it, but we can easily change it afterwards ;)
diff --git a/Python/codecs.c b/Python/codecs.c
index 253bc39..0e8c374 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -260,6 +260,56 @@
     return NULL;
 }
 
+PyObject *PyCodec_IncrementalEncoder(const char *encoding,
+				     const char *errors)
+{
+    PyObject *codecs, *ret, *encoder;
+
+    codecs = _PyCodec_Lookup(encoding);
+    if (codecs == NULL)
+	goto onError;
+    encoder = PyObject_GetAttrString(codecs, "incrementalencoder");
+    if (encoder == NULL) {
+	Py_DECREF(codecs);
+	return NULL;
+    }
+    if (errors)
+	ret = PyObject_CallFunction(encoder, "O", errors);
+    else
+	ret = PyObject_CallFunction(encoder, NULL);
+    Py_DECREF(encoder);
+    Py_DECREF(codecs);
+    return ret;
+
+ onError:
+    return NULL;
+}
+
+PyObject *PyCodec_IncrementalDecoder(const char *encoding,
+				     const char *errors)
+{
+    PyObject *codecs, *ret, *decoder;
+
+    codecs = _PyCodec_Lookup(encoding);
+    if (codecs == NULL)
+	goto onError;
+    decoder = PyObject_GetAttrString(codecs, "incrementaldecoder");
+    if (decoder == NULL) {
+	Py_DECREF(codecs);
+	return NULL;
+    }
+    if (errors)
+	ret = PyObject_CallFunction(decoder, "O", errors);
+    else
+	ret = PyObject_CallFunction(decoder, NULL);
+    Py_DECREF(decoder);
+    Py_DECREF(codecs);
+    return ret;
+
+ onError:
+    return NULL;
+}
+
 PyObject *PyCodec_StreamReader(const char *encoding,
 			       PyObject *stream,
 			       const char *errors)