runtime, type switch: eliminate package global name space assumption

bonus: type switch now detects multiple uses of identical interface types.
bonus: interface types are now order-independent, following the spec.

R=ken2
CC=golang-dev
https://golang.org/cl/194053
diff --git a/test/typeswitch2.go b/test/typeswitch2.go
new file mode 100644
index 0000000..f8fe396
--- /dev/null
+++ b/test/typeswitch2.go
@@ -0,0 +1,28 @@
+// errchk $G -e $D/$F.go
+
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import "io"
+
+func whatis(x interface{}) string {
+	switch x.(type) {
+	case int:
+		return "int"
+	case int: // ERROR "duplicate"
+		return "int8"
+	case io.Reader:
+		return "Reader1"
+	case io.Reader: // ERROR "duplicate"
+		return "Reader2"
+	case interface { r(); w() }:
+		return "rw"
+	case interface { w(); r() }:	// ERROR "duplicate"
+		return "wr"
+	
+	}
+	return ""
+}