interface speedups and fixes.
more caching, better hash functions, proper locking.
fixed a bug in interface comparison too.

R=ken
DELTA=177  (124 added, 10 deleted, 43 changed)
OCL=23491
CL=23493
diff --git a/test/cmp1.go b/test/cmp1.go
index 82e932f..d1a1c7a 100644
--- a/test/cmp1.go
+++ b/test/cmp1.go
@@ -41,7 +41,7 @@
 	var ic interface{} = c;
 	var id interface{} = d;
 	var ie interface{} = e;
-
+	
 	// these comparisons are okay because
 	// string compare is okay and the others
 	// are comparisons where the types differ.
@@ -53,6 +53,13 @@
 	istrue(ic == id);
 	istrue(ie == ie);
 
+	// 6g used to let this go through as true.
+	var g uint64 = 123;
+	var h int64 = 123;
+	var ig interface{} = g;
+	var ih interface{} = h;
+	isfalse(ig == ih);
+
 	// map of interface should use == on interface values,
 	// not memory.
 	// TODO: should m[c], m[d] be valid here?