WIP/PERF: block-wise ops for frame-with-series axis=1
xref #32779 which does the same thing for frame-with-frame ops.  This one is turning out to be the most difficult of the cases to get right.

Posting this for comments, in large part because there are still two failing tests locally, and these may just be behaviors we want to change.

```
# test_scalar_na_logical_ops_corners
s = Series([2, 3, 4, 5, 6, 7, 8, 9, datetime(2005, 1, 1)])
s[::2] = np.nan
d = DataFrame({"A": s})

with pytest.raises(TypeError):
    d.__and__(s, axis="columns")   # <-- when done block-wise, this does not raise
```

The other one is harder to post an example of because it uses fixtures making it a PITA to copy/paste from the test, but the upshot is that `op(frame[mixed-float-dtypes], series[float64])` downcasts to the original dtypes ATM (since each column is effectively operating against a scalar) but when done blockwise they all come back float64.