some parser optimizations, xmllint --memory --timing --repeat --stream

* dict.c parser.c xmlstring.c: some parser optimizations,
  xmllint --memory --timing --repeat --stream ./db10000.xml
  went down from 16.5 secs to 15.5 secs.
Daniel
diff --git a/dict.c b/dict.c
index b56cef2..0a9aebe 100644
--- a/dict.c
+++ b/dict.c
@@ -484,14 +484,30 @@
     } else {
 	for (insert = &(dict->dict[key]); insert->next != NULL;
 	     insert = insert->next) {
+#ifdef __GNUC__
+	    if (insert->len == len) {
+	        register int tmp = memcmp(insert->name, name, len);
+		if (!tmp)
+		    return(insert->name);
+	    }
+#else
 	    if ((insert->len == len) &&
 	        (!xmlStrncmp(insert->name, name, len)))
 		return(insert->name);
+#endif
 	    nbi++;
 	}
+#ifdef __GNUC__
+	if (insert->len == len) {
+	    register int tmp = memcmp(insert->name, name, len);
+	    if (!tmp)
+		return(insert->name);
+	}
+#else
 	if ((insert->len == len) &&
 	    (!xmlStrncmp(insert->name, name, len)))
 	    return(insert->name);
+#endif
     }
 
     ret = xmlDictAddString(dict, name, len);