This code will more directly follow Headers rules. In particular:
- Attempting to add metadata with a name that isn't a valid header name
will cause an error immediately instead of in `applyMetadata` (likely
at fetch time).
- Header names are not case sensitive. Using a Headers object internally
means that the metadata API will respect that. For example,
`setMetadata('a', ...)` will override an earlier value from
`setMetadata('A', ...)`. Previously, this happened "accidentally" in
`applyMetadata` instead of in the metadata container itself.