reflect/protoreflect, reflect/protoregistry: move descriptor lookup to registry

Drop the protoreflect.FileDescriptor.DescriptorByName method.
Descriptor lookup will always happen through a protoregistry.Files, which
is more generally useful (it's rare that you want to find a descriptor in a
specific file, as opposed to a package which may be composed of multiple files).

Split protoregistry.Files descriptor lookup into individual per-type functions
(enum, message, extension, service), matching the preg.Types API.

Drop the ability to look up enum values, message fields, and service methods
for now. This can be easily added later if needed, and is trivial to implement
in user code. (e.g., look up the service and then consult sd.Methods.ByName().)

Change-Id: I2b3d8ef888921a8464ba1434eddab20c7d3a458e
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/172118
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/fileinit/desc.go b/internal/fileinit/desc.go
index f305ee0..199e38d 100644
--- a/internal/fileinit/desc.go
+++ b/internal/fileinit/desc.go
@@ -246,7 +246,6 @@
 	fileLazy struct {
 		syntax  pref.Syntax
 		imports fileImports
-		byName  map[pref.FullName]pref.Descriptor
 		options []byte
 	}
 )
@@ -260,17 +259,16 @@
 func (fd *fileDesc) Options() pref.ProtoMessage {
 	return unmarshalOptions(descopts.File, fd.lazyInit().options)
 }
-func (fd *fileDesc) Path() string                                     { return fd.path }
-func (fd *fileDesc) Package() pref.FullName                           { return fd.protoPackage }
-func (fd *fileDesc) Imports() pref.FileImports                        { return &fd.lazyInit().imports }
-func (fd *fileDesc) Enums() pref.EnumDescriptors                      { return &fd.enums }
-func (fd *fileDesc) Messages() pref.MessageDescriptors                { return &fd.messages }
-func (fd *fileDesc) Extensions() pref.ExtensionDescriptors            { return &fd.extensions }
-func (fd *fileDesc) Services() pref.ServiceDescriptors                { return &fd.services }
-func (fd *fileDesc) DescriptorByName(s pref.FullName) pref.Descriptor { return fd.lazyInit().byName[s] }
-func (fd *fileDesc) Format(s fmt.State, r rune)                       { pfmt.FormatDesc(s, r, fd) }
-func (fd *fileDesc) ProtoType(pref.FileDescriptor)                    {}
-func (fd *fileDesc) ProtoInternal(pragma.DoNotImplement)              {}
+func (fd *fileDesc) Path() string                          { return fd.path }
+func (fd *fileDesc) Package() pref.FullName                { return fd.protoPackage }
+func (fd *fileDesc) Imports() pref.FileImports             { return &fd.lazyInit().imports }
+func (fd *fileDesc) Enums() pref.EnumDescriptors           { return &fd.enums }
+func (fd *fileDesc) Messages() pref.MessageDescriptors     { return &fd.messages }
+func (fd *fileDesc) Extensions() pref.ExtensionDescriptors { return &fd.extensions }
+func (fd *fileDesc) Services() pref.ServiceDescriptors     { return &fd.services }
+func (fd *fileDesc) Format(s fmt.State, r rune)            { pfmt.FormatDesc(s, r, fd) }
+func (fd *fileDesc) ProtoType(pref.FileDescriptor)         {}
+func (fd *fileDesc) ProtoInternal(pragma.DoNotImplement)   {}
 
 type (
 	enumDesc struct {