Fix fastsearch for UCS2 and UCS4

 * If needle is 0, try (p[0] >> 16) & 0xff for UCS4
 * Disable fastsearch_memchr_1char() if needle is zero for UCS2 and UCS4
diff --git a/Objects/stringlib/fastsearch.h b/Objects/stringlib/fastsearch.h
index 33ab6ff..085ec6a 100644
--- a/Objects/stringlib/fastsearch.h
+++ b/Objects/stringlib/fastsearch.h
@@ -115,11 +115,17 @@
             unsigned char needle;
             int use_needle = 1;
             needle = p[0] & 0xff;
-            if (needle == 0 && sizeof(STRINGLIB_CHAR) > 1) {
+#if STRINGLIB_SIZEOF_CHAR > 1
+            if (needle == 0) {
                 needle = (p[0] >> 8) & 0xff;
-                if (needle >= 32)
+#if STRINGLIB_SIZEOF_CHAR > 2
+                if (needle == 0)
+                    needle = (p[0] >> 16) & 0xff;
+#endif
+                if (needle >= 32 || needle == 0)
                     use_needle = 0;
             }
+#endif
             if (use_needle)
                 return STRINGLIB(fastsearch_memchr_1char)
                        (s, n, p[0], needle, maxcount, mode);