proto: return more useful error message in SetExtension (#685)

Including the types that are mismatched, rather than just stating that there was a type mismatch makes the error easier to debug and fix.
diff --git a/proto/extensions.go b/proto/extensions.go
index 816a3b9..dacdd22 100644
--- a/proto/extensions.go
+++ b/proto/extensions.go
@@ -488,7 +488,7 @@
 	}
 	typ := reflect.TypeOf(extension.ExtensionType)
 	if typ != reflect.TypeOf(value) {
-		return errors.New("proto: bad extension value type")
+		return fmt.Errorf("proto: bad extension value type. got: %T, want: %T", value, extension.ExtensionType)
 	}
 	// nil extension values need to be caught early, because the
 	// encoder can't distinguish an ErrNil due to a nil extension