proto: reset message by default in Unmarshal

We change Unmarshal to reset a message by default.
* We add a Merge option to UnmarshalOptions for explicit merging.
* We speed up Reset by checking for the Reset method.
* Remove TODOs in prototext and protojson about reset behavior.

Fixes golang/protobuf#890

Change-Id: Ibd8963c741053f564acf061fbdb846699942109c
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/195457
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/proto/proto_methods.go b/proto/proto_methods.go
index 50abbd6..86dde4a 100644
--- a/proto/proto_methods.go
+++ b/proto/proto_methods.go
@@ -12,6 +12,8 @@
 	"google.golang.org/protobuf/runtime/protoiface"
 )
 
+const hasProtoMethods = true
+
 func protoMethods(m protoreflect.Message) *protoiface.Methods {
 	if x, ok := m.(protoiface.Methoder); ok {
 		return x.ProtoMethods()