proto: fix DiscardUnknown

UnmarshalOptions.DiscardUnknown was simply not working. Oops. Fix it.
Add a test.

Change-Id: I76888eae1221d99a007f0e9cdb711d292e6856b1
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/216762
Reviewed-by: Joe Tsai <joetsai@google.com>
diff --git a/internal/impl/decode.go b/internal/impl/decode.go
index 4b1bc6d..74fd821 100644
--- a/internal/impl/decode.go
+++ b/internal/impl/decode.go
@@ -176,7 +176,7 @@
 			if n < 0 {
 				return out, wire.ParseError(n)
 			}
-			if mi.unknownOffset.IsValid() {
+			if !opts.DiscardUnknown() && mi.unknownOffset.IsValid() {
 				u := p.Apply(mi.unknownOffset).Bytes()
 				*u = wire.AppendTag(*u, num, wtyp)
 				*u = append(*u, b[:n]...)