It would be nice if it were this simple for updates, but I don't think it is. What if the schema has `denyUpdate: true` for the key `name.first`? In that case the key `name.first` will not be in `fields`, which will contain only `name`.

I *think* it should work to recursively traverse the entire modifier tree and return false if any of the modifier keys match any of the `self._denyUpdateKeys` keys. Because it doesn't really matter what the `$` operators might be, we just want to deny if the user is trying to do anything at all to those keys.