internal/impl: refactor MessageInfo

Changes made:
* Move MessageInfo.{methods,extensionFieldInfosMu,extensionFieldInfos}
to the coderMessageInfo type since they are fields all related to the
fast-path implementation, which is what the coderMessageInfo is for.
* Rename message_field.go -> message_reflect_field.go to make it obvious
from the file name that this only deals with the reflection implementation.
* Rename message_test.go -> message_reflect_test.go.
* Move reflection-specific implementation functions from message.go
to message_reflect.go. The intention is to make it such that message.go
is the entry point to message implementations and is agnostic towards
whether we are implementing reflection or the table-driven fast path.

Overall, there is no semantic changes. Just code movement.

Change-Id: I7743c39ba84dc63cd2a02934c3319285e16d6b1c
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/190100
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/internal/impl/codec_message.go b/internal/impl/codec_message.go
index d1e36dd..92f38e9 100644
--- a/internal/impl/codec_message.go
+++ b/internal/impl/codec_message.go
@@ -8,6 +8,7 @@
 	"fmt"
 	"reflect"
 	"sort"
+	"sync"
 
 	"google.golang.org/protobuf/internal/encoding/messageset"
 	"google.golang.org/protobuf/internal/encoding/wire"
@@ -19,6 +20,8 @@
 // This is a different type from MessageInfo to keep MessageInfo as general-purpose as
 // possible.
 type coderMessageInfo struct {
+	methods piface.Methods
+
 	orderedCoderFields []*coderFieldInfo
 	denseCoderFields   []*coderFieldInfo
 	coderFields        map[wire.Number]*coderFieldInfo
@@ -26,6 +29,9 @@
 	unknownOffset      offset
 	extensionOffset    offset
 	needsInitCheck     bool
+
+	extensionFieldInfosMu sync.RWMutex
+	extensionFieldInfos   map[pref.ExtensionType]*extensionFieldInfo
 }
 
 type coderFieldInfo struct {
@@ -38,7 +44,7 @@
 	isRequired bool              // true if field is required
 }
 
-func (mi *MessageInfo) makeMethods(t reflect.Type, si structInfo) {
+func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) {
 	mi.sizecacheOffset = si.sizecacheOffset
 	mi.unknownOffset = si.unknownOffset
 	mi.extensionOffset = si.extensionOffset