reflect/protoreflect: add helper methods to FieldDescriptor

Added API:
	FieldDescriptor.IsExtension
	FieldDescriptor.IsList
	FieldDescriptor.MapKey
	FieldDescriptor.MapValue
	FieldDescriptor.ContainingOneof
	FieldDescriptor.ContainingMessage

Deprecated API (to be removed in subsequent CL):
	FieldDescriptor.Oneof
	FieldDescriptor.Extendee

These methods help cleanup several common usage patterns.

Change-Id: I9a3ffabc2edb2173c536509b22f330f98bba7cf3
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/176977
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/protogen/protogen.go b/protogen/protogen.go
index 41c2392..d84c6d0 100644
--- a/protogen/protogen.go
+++ b/protogen/protogen.go
@@ -637,9 +637,9 @@
 func newField(gen *Plugin, f *File, message *Message, desc protoreflect.FieldDescriptor) *Field {
 	var loc Location
 	switch {
-	case desc.Extendee() != nil && message == nil:
+	case desc.IsExtension() && message == nil:
 		loc = f.location(fieldnum.FileDescriptorProto_Extension, int32(desc.Index()))
-	case desc.Extendee() != nil && message != nil:
+	case desc.IsExtension() && message != nil:
 		loc = message.Location.appendPath(fieldnum.DescriptorProto_Extension, int32(desc.Index()))
 	default:
 		loc = message.Location.appendPath(fieldnum.DescriptorProto_Field, int32(desc.Index()))
@@ -650,8 +650,8 @@
 		Parent:   message,
 		Location: loc,
 	}
-	if desc.Oneof() != nil {
-		field.Oneof = message.Oneofs[desc.Oneof().Index()]
+	if desc.ContainingOneof() != nil {
+		field.Oneof = message.Oneofs[desc.ContainingOneof().Index()]
 	}
 	return field
 }
@@ -677,8 +677,8 @@
 		}
 		field.Enum = enum
 	}
-	if desc.Extendee() != nil {
-		mname := desc.Extendee().FullName()
+	if desc.IsExtension() {
+		mname := desc.ContainingMessage().FullName()
 		message, ok := gen.messagesByName[mname]
 		if !ok {
 			return fmt.Errorf("field %v: no descriptor for type %v", desc.FullName(), mname)