jsonpb: Reject unknown fields when parsing into a struct.

This follows the proto3 JSON spec, and seems wise anyway.
diff --git a/jsonpb/jsonpb.go b/jsonpb/jsonpb.go
index f3e53d4..65d0335 100644
--- a/jsonpb/jsonpb.go
+++ b/jsonpb/jsonpb.go
@@ -207,7 +207,7 @@
 	}
 
 	// Handle maps.
-	// NOTE: Since Go randomizes map iteration, we sort keys for stable output.
+	// Since Go randomizes map iteration, we sort keys for stable output.
 	if v.Kind() == reflect.Map {
 		out.write(`{`)
 		keys := v.MapKeys()
@@ -320,8 +320,18 @@
 				if err := unmarshalValue(target.Field(i), valueForField); err != nil {
 					return err
 				}
+				delete(jsonFields, fieldName)
 			}
 		}
+		if len(jsonFields) > 0 {
+			// Pick any field to be the scapegoat.
+			var f string
+			for fname := range jsonFields {
+				f = fname
+				break
+			}
+			return fmt.Errorf("unknown field %q in %v", f, targetType)
+		}
 		return nil
 	}
 
@@ -389,6 +399,7 @@
 
 // parseFieldOptions returns the field name and if it should be omited.
 func parseFieldOptions(f reflect.StructField) (string, bool) {
+	// TODO: Do this without using the "json" field tag.
 	name := f.Name
 	omitEmpty := false
 	tag := f.Tag.Get("json")