text: Title: Accessing `id` property of model objects may cause `ValueError`
  Body: With 6.1a1 (not seen with 6.0.1), the following construct no longer works to retrieve the currently executed keyword's ID from the stack IF the keyword is executed via `Run Keyword ...` variants:
  
  ```
      for stack in inspect.stack():
          frame = inspect.getargvalues(stack[0])
          if getattr(frame, 'locals', None) and frame.locals.get('step'):
              return frame.locals['step'].id
  ```
  
  
  This can easily be reproduced using the following test suite and custom library:
  
  ```
  *** Settings ***
  Library    testlib.py
  
  *** Test Cases ***
  # the first test passes, the two remaining fail
  Test KW 
      Test Keyword
  
  Test Run KW 
      Run Keyword    Test Keyword
  
  Test Run KW and expect error
      Run Keyword and Expect Error   you told me to fail    Test Keyword    ${TRUE}
  ```
  
  testlib.py:
  ```
  import inspect
  from robot.api import logger
  
  
  def _get_current_keyword_id():
      """
      Traverses the stack to find the current keyword and returns its id.
      """
      for stack in inspect.stack():
          frame = inspect.getargvalues(stack[0])
          if getattr(frame, 'locals', None) and frame.locals.get('step'):
              return frame.locals['step'].id
  
  
  def test_keyword(fail=False):
      logger.info(_get_current_keyword_id())
      assert not fail, 'you told me to fail'
  ```
  
  execution with 6.1a1:
  
  ```
  root@36c9fa153edc:workspace# robot -L TRACE keyword-id.robot 
  ==============================================================================
  Keyword-Id                                                                    
  ==============================================================================
  Test KW                                                               | PASS |
  ------------------------------------------------------------------------------
  Test Run KW                                                           | FAIL |
  ValueError: robot.running.Keyword(name='Test Keyword', args=[], assign=()) is not in list
  ------------------------------------------------------------------------------
  Test Run KW and expect error                                          | FAIL |
  Expected error 'you told me to fail' but got 'ValueError: robot.running.Keyword(name='Test Keyword', args=['${TRUE}'], assign=()) is not in list'.
  ------------------------------------------------------------------------------
  Keyword-Id                                                            | FAIL |
  3 tests, 1 passed, 2 failed
  ==============================================================================
  ```
  
  stack trace shown in log:
  ```
  Traceback (most recent call last):
    File "/home/cisco/cxta/workspace/testlib.py", line 16, in test_keyword
      logger.info(_get_current_keyword_id())
    File "/home/cisco/cxta/workspace/testlib.py", line 12, in _get_current_keyword_id
      return frame.locals['step'].id
    File "/venv/lib/python3.9/site-packages/robot/model/body.py", line 58, in id
      return self._get_id(self.parent)
    File "/venv/lib/python3.9/site-packages/robot/model/body.py", line 69, in _get_id
      my_id = steps.index(self) + 1
  ValueError: robot.running.Keyword(name='Test Keyword', args=[], assign=()) is not in list
  ```
  
  execution with 6.0.1 passes.