code: @CheckResult
    @RestrictTo(RestrictTo.Scope.LIBRARY)
    public KeyPath addKey(String key) {
      KeyPath newKeyPath = new KeyPath(this);
      newKeyPath.keys.add(key);
      return newKeyPath;
    }
docs: Returns a new KeyPath with the key added.
  This is used during keypath resolution. Children normally don't know about all of their parent
  elements so this is used to keep track of the fully qualified keypath.
  This returns a key keypath because during resolution, the full keypath element tree is walked
  and if this modified the original copy, it would remain after popping back up the element tree.