REF: implement arithmetic, comparison, logical ops on arrays
Following #28413, #28396, and #28395, these are all pretty straightforward refactors.

`arithmetic_op`, `comparison_op`, and `logical_op` are going to become the ops that we call `Block`-wise.  Hopefully also `PandasArray` will use them directly.

Other follow-ups I have in mind:
- Move `should_extension_dispatch` and `dispatch_to_extension_op` so we dont need runtime imports
- get rid of `eval_kwargs` entirely, they're not really necessary at this point
- see if we can use `numexpr` for comparison/logical ops
- docstrings
- address inconsistencies in when we call `extract_array`
- address inconsistencies in how `Series` methods handle `__finalize__` and alignment
- simplify `logical_op`'s `na_op`