text: Title: Test is not failed if listener sets keyword status to fail and leaves message empty
  Body: RF 7.1 enhanced the listener interface so that listeners can affect the execution status (#5090). For example, the following listener ought to be able to fail a keyword if "something bad happened" so that the execution stops and the test using the keyword fails:
  ```python
  def end_keyword(data: running.Keyword, result: result.Keyword):
      if result.status == 'PASS' and something_bad_happened():
          result.status = 'FAIL'
  ```
  Unfortunately exactly the above doesn't work. The keyword fails and remaining keywords are not executed, but the test is nevertheless passed. The bug isn't actually in the code related to listeners, but in the code validation the test status where an empty message is considered to mean that there was no failure. The problem thus doesn't occur if the listener also sets the message. This example causes the test to fail as expected:
  ```python
  def end_keyword(data: running.Keyword, result: result.Keyword):
      if result.status == 'PASS' and something_bad_happened():
          result.status = 'FAIL'
          result.message = 'Something bad happened'
  ```
  Listeners should in general provide a meaningful error message when they fail a keyword or change the status otherwise, but this is nevertheless a pretty severe bug as it can cause false positives.