reflect/protoreflect: add HasJSONName, ReservedRanges, and ReservedNames

These properties of descriptors are currently missing and makes it impossible
to convert a FileDescriptorProto into one of the structured Go representations
and convert it back to a proto message without loss of information.

Furthermore, ReservedRanges and ReservedNames has semantic importance
to text serialization.

Change-Id: Ic33c30020ad51912b143156b95f47a4fb8da3503
Reviewed-on: https://go-review.googlesource.com/c/153019
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/legacy/file_test.go b/internal/legacy/file_test.go
index 7f3b79a..8ac6d9f 100644
--- a/internal/legacy/file_test.go
+++ b/internal/legacy/file_test.go
@@ -409,6 +409,9 @@
 					case "Enums", "Messages", "Extensions":
 						// Ignore nested message and enum declarations since
 						// legacy descriptors are all created standalone.
+					case "HasJSONName":
+						// Ignore this since the semantics of the field has
+						// changed across protoc and protoc-gen-go releases.
 					case "OneofType", "ExtendedType", "EnumType", "MessageType":
 						// Avoid descending into a dependency to avoid a cycle.
 						// Just record the full name if available.