text: Title: `Message.id` broken if parent is not `Keyword` or `ExecutionErrors`
  Body: ```python
  >>> from robot.result import Keyword, TestCase, Var
  >>> from robot.result import Keyword, TestCase, While
  >>> 
  >>> Keyword().body.create_message().id
  'k1-m1'
  >>> TestCase().body.create_message().id
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/home/peke/Devel/robotframework/src/robot/model/message.py", line 64, in id
      messages = self.parent.messages
                 ^^^^^^^^^^^^^^^^^^^^
  AttributeError: 'TestCase' object has no attribute 'messages'. Did you mean: 'message'?
  >>> While().body.create_message().id
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/home/peke/Devel/robotframework/src/robot/model/message.py", line 64, in id
      messages = self.parent.messages
                 ^^^^^^^^^^^^^^^^^^^^
  AttributeError: 'While' object has no attribute 'messages'. Did you mean: 'message'?
  ```
  The reason is that the `Message.id` property tries to access `parent.messages` which most of the possible parent objects don't have. This is easy to fix by using `parent.body.filter(messages=True)` in that case.
  
  Apparently our code nor nobody else has used `Message.id`, because our tests pass and nobody has reported this. Instead of fixing `Message.id` we could simply remove it, but I believe its good that all body items have `id`.