TYP/REF: define comparison methods non-dynamically
- [ ] closes #xxxx
- [ ] tests added / passed
- [ ] passes `black pandas`
- [ ] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

xref #31160, cc @simonjayhawkins @WillAyd

This implements OpsMixin which is more mypy-friendly than the status quo, and uses it in Series, Index, and DatetimeLikeArrayMixin.  There are a handful more places where it can be used in an upcoming pass.

Will do the same for arithmetic/boolean ops if there is consensus that this is worth pursuing.