Expanding `ReadOnly` to normal classes & protocols

I think it’s important to specify this. Some existing type checker features are underspecified, but for new features we should strive to specify them fully so users can rely on consistent behavior across type checkers.

I’m not sure yet what the right behavior is here. Users will likely want to assign ReadOnly variables also in methods invoked from __init__ (a common pattern in some codebases). For example, should it be possible to assign to a ReadOnly in a dataclass __post_init__ method?