REF: define arithmetic methods non-dynamically
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

Avoid runtime imports, get stuff out of `ops.__init__`, which was the goal 4-5 years ago when ops was first madea  directory.

Move relevant helper methods from frame/series files .  Decided on a new mixin rather than dumping everything directly in DataFrame/Series bc those files are too bug as it is.  If others feel strongly i'd be OK putting it all in DataFrame/Series.
The failing doctest looks like the doctest is wrong.  Must just not be getting in the status quo?

```
>>> a = pd.Series([1, 1, 1, np.nan], index=['a', 'b', 'c', 'd'])
>>> b = pd.Series([1, np.nan, 1, np.nan], index=['a', 'b', 'd', 'e'])
>>> a.divmod(b, fill_value=0)
(a    1.0
- b    NaN
- c    NaN
+ b    inf
+ c    inf
 d    0.0
 e    NaN
 dtype: float64,
 a    0.0
 b    NaN
 c    NaN
 d    0.0
 e    NaN
 dtype: float64)
``` > The failing doctest looks like the doctest is wrong. Must just not be getting in the status quo?

Hmm is this the same for DataFrame too and/or a recent change?

For label b, I would expect this to follow:

```
In [10]: 1 / np.nan
Out[10]: nan
```

For label c, since there's no corresponding values in series `b` I would expect it to be filled with nan too? > I would expect it to be filled with nan too?

At the reindex stage it is, but then `fill_value=0` part is done after the reindex. Thanks @jbrockmendel 