Fix SF # 635969, No error "not all arguments converted"

When mwh added extended slicing, strings and unicode became mappings.
Thus, dict was set which prevented an error when doing:
	newstr = 'format without a percent' % string_value

This fix raises an exception again when there are no formats
and % with a string value.
diff --git a/Lib/test/test_format.py b/Lib/test/test_format.py
index b40e820..da4d85a 100644
--- a/Lib/test/test_format.py
+++ b/Lib/test/test_format.py
@@ -221,6 +221,14 @@
 
 test_exc('%d', '1', TypeError, "int argument required")
 test_exc('%g', '1', TypeError, "float argument required")
+test_exc('no format', '1', TypeError, 
+         "not all arguments converted during string formatting")
+test_exc('no format', u'1', TypeError, 
+         "not all arguments converted during string formatting")
+test_exc(u'no format', '1', TypeError, 
+         "not all arguments converted during string formatting")
+test_exc(u'no format', u'1', TypeError, 
+         "not all arguments converted during string formatting")
 
 if sys.maxint == 2**32-1:
     # crashes 2.2.1 and earlier:
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 35b4b47..bf8bad5 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -3622,7 +3622,8 @@
 		arglen = -1;
 		argidx = -2;
 	}
-	if (args->ob_type->tp_as_mapping && !PyTuple_Check(args))
+	if (args->ob_type->tp_as_mapping && !PyTuple_Check(args) &&
+	    !PyObject_TypeCheck(args, &PyBaseString_Type))
 		dict = args;
 	while (--fmtcnt >= 0) {
 		if (*fmt != '%') {
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index c1cdebc..12846bf 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -6181,7 +6181,8 @@
 	arglen = -1;
 	argidx = -2;
     }
-    if (args->ob_type->tp_as_mapping && !PyTuple_Check(args))
+    if (args->ob_type->tp_as_mapping && !PyTuple_Check(args) &&
+        !PyObject_TypeCheck(args, &PyBaseString_Type))
 	dict = args;
 
     while (--fmtcnt >= 0) {