internal/impl: handle legacy ExtensionDesc form

Add support for an ExtensionDesc with only Field populated as returned by
protoV1.ExtensionDescs. Rather than panicking when TypeDescriptor is called,
return a placeholder that preserves the name and/or number.

Change-Id: I60352a7aec8ccd8a0c1fb08db5891043a441695f
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/193725
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/impl/extension.go b/internal/impl/extension.go
index a895763..723bdb0 100644
--- a/internal/impl/extension.go
+++ b/internal/impl/extension.go
@@ -140,10 +140,12 @@
 	if xi.desc.ExtensionDescriptor == nil {
 		xi.initFromLegacy()
 	}
-	if xi.ExtensionType == nil {
-		xi.initToLegacy()
+	if !xi.desc.ExtensionDescriptor.IsPlaceholder() {
+		if xi.ExtensionType == nil {
+			xi.initToLegacy()
+		}
+		xi.conv = NewConverter(xi.goType, xi.desc)
 	}
-	xi.conv = NewConverter(xi.goType, xi.desc)
 }
 
 type extensionTypeDescriptor struct {