text: Title: Enhance reporting errors and warnings in parsing model tokens
  Body: The parsing model supports setting errors for individual tokens, but there are two problems with the current approach:
  
  1. Errors (typically syntax errors) aren't separated from warnings (typically deprecations). This caused a problem when deprecating singular section headers (#4432) and the code reporting the warning as part of execution needed to know [what errors can occur in different contexts](https://github.com/robotframework/robotframework/blob/d007855fea4957031cb952c4157fa36dfb3b7228/src/robot/running/builder/transformers.py#L516) to handle the problem. With the planned deprecation of the pipe-separated format (#5203) this is likely even a bigger problem, because there's no single context where pipes can be used.
  2. It isn't easy to recognize if the same error/warning occurs multiple times in same file. This requires comparing messages, but because they typically contain some variables parts, they cannot be compared directly. Searching for a certain sub-string is also problematic, because error messages can change.
  
  My proposal for solving both of the above problems is adding new `errno` attribute to to the `Token` objects with the following semantics:
  1. `errno` is an integer representing an error code.
  2. Each error and warning has a different code.
  3. Codes have constant names like `ERR_SINGULAR_HEADER_DEPRECATED` stored as attributes of the `Token` class.
  4. Errors and warnings have different ranges so that it is easy to separate them. We could, for example, use negative values with warnings and positive with errors. Zero would mean no error/warning.
  