gc: Better typechecks and errors in switches.

Allow any type in switch on interface value.
Statically check typeswitch early.

Fixes #2423.
Fixes #2424.

R=rsc, dsymonds
CC=golang-dev
https://golang.org/cl/5339045
diff --git a/test/typeswitch3.go b/test/typeswitch3.go
new file mode 100644
index 0000000..99d08a2
--- /dev/null
+++ b/test/typeswitch3.go
@@ -0,0 +1,20 @@
+// errchk $G -e $D/$F.go
+
+// Copyright 2011 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
+
+
+type I interface {
+       M()
+}
+
+func main(){
+       var x I
+       switch x.(type) {
+       case string:	// ERROR "impossible"
+               println("FAIL")
+       }
+}