text: Title: New API for using named arguments programmatically
  Body: RF 7.0 attempted to provide a more convenient API for setting keyword arguments programmatically (#5000). The idea was to both support named arguments with non-string values and to avoid the need for escaping `\` and other special characters in strings. Unfortunately the selected implementation approach caused backwards incompatibility problems.
  
  The implementation done in RF 7.0 was reverted in RF 7.0.1. Because being able to use non-string values with named arguments is important, for example, for the DataDriver tool, RF 7.0.1 also added a new API for exactly that purpose (#5031). This new API has a problem that it's not compatible with the JSON model. A better API is thus needed. I believe it's best to concentrate on named arguments, but we can think about escaping as well and submit a separate issue about that if needed.
  
  My proposal is to add new `named_args: dict|None = None` argument to `robot.running.Keyword`. The argument would be `None` by default and it wouldn't be set by Robot when executing tests normally. In such usages `args` would be expected to contain also named arguments using the `name=value` syntax. In programmatic usage `named_args` could be set to a dictionary containing named arguments. In that case `args` would be expected to contain only positional arguments. For execution it would be enough to enhance `robot.running.Keyword`, but it might make sense to add `named_args` also to `robot.result.Keyword`.