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/encoding/bench_test.go b/encoding/bench_test.go
index 88f62b7..fdb33d1 100644
--- a/encoding/bench_test.go
+++ b/encoding/bench_test.go
@@ -49,13 +49,12 @@
 	for i := 0; i < fieldDescs.Len(); i++ {
 		fd := fieldDescs.Get(i)
 		num := fd.Number()
-		if cardinality := fd.Cardinality(); cardinality == pref.Repeated {
-			if !fd.IsMap() {
-				setList(knownFields.Get(num).List(), fd, level)
-			} else {
-				setMap(knownFields.Get(num).Map(), fd, level)
-			}
-		} else {
+		switch {
+		case fd.IsList():
+			setList(knownFields.Get(num).List(), fd, level)
+		case fd.IsMap():
+			setMap(knownFields.Get(num).Map(), fd, level)
+		default:
 			setScalarField(knownFields, fd, level)
 		}
 	}