optimization when freeing hash tables. some tuning of buffer allocations

* dict.c hash.c: optimization when freeing hash tables.
* parser.c xmlIO.c include/libxml/tree.h: some tuning of buffer
  allocations
* parser.c parserInternals.c include/libxml/parser.h: keep a
  single allocated block for all the attributes callbacks,
  avoid useless malloc()/free()
* tree.c: do not realloc() when growing a buffer if the buffer
  ain't full, malloc/memcpy/free avoid copying memory.
Daniel
diff --git a/include/libxml/parser.h b/include/libxml/parser.h
index b080384..ac3f055 100644
--- a/include/libxml/parser.h
+++ b/include/libxml/parser.h
@@ -236,6 +236,8 @@
     int                recovery;      /* run in recovery mode */
     int                progressive;   /* is this a progressive parsing */
     xmlDictPtr         dict;          /* dictionnary for the parser */
+    const xmlChar *   *atts;         /* array for the attributes callbacks */
+    int                maxatts;       /* the size of the array */
 };
 
 /**