[ty] Support own-line suppression comments (#26785)
## Summary
Prior to this change, we only applied `ty: ignore` comments to
diagnostics on the same line. An ignore placed after executable code on
its own line was therefore reported as unused and did not suppress the
following statement:
```python
existing = 1
# ty: ignore[unresolved-reference]
value = missing
```
We now match Ruff's placement semantics for `ty: ignore`: an ignore
before a logical line covers that logical line, while an ignore inside a
multiline statement covers the next non-comment physical line. These
ranges can be nested, and `type: ignore` retains its existing same-line
and file-level behavior.