Use align_method in comp_method_FRAME
Closes #20090

<b>update</b> Since #23000 was merged, some of the discussion is out of date.  The bottom line remains unchanged: This PR makes DataFrame _comparison_ ops behave like DataFrame _arithmetic_ ops currently do.  Also fixes some bugs e.g. #20090
<b> end update</b>

This is a much nicer alternative to the implementation in #22751.  The problem is that two tests still fail with this implementation.  We need to pin down the design spec more explicitly regardless.

core.ops has three functions for defining DataFrame ops: _arith_method_FRAME, _flex_comp_method_FRAME, _comp_method_FRAME.  The first two both call `_align_method_FRAME`, with `_comp_method_FRAME` being the outlier.  This PR just adds that alignment call.

The two tests that currently fail:

```
df = DataFrame(np.arange(6).reshape((3, 2)))
b_r = np.atleast_2d([2, 2])
l = (2, 2, 2)
expected = DataFrame([[False, False], [False, True], [True, True]])
result = df > l   # <-- raises ValueError under this PR because it has the wrong shape
assert_frame_equal(result, expected)

result = df > b_r   # <-- raises ValueError under this PR because it has the wrong shape
assert_frame_equal(result, expected)
```

```
df = pd.DataFrame(np.arange(6).reshape((3, 2)))
with pytest.raises(ValueError):  # <-- doesnt raise
           df == (2, 2)
```

I understand why the behavior tested by the first test makes sense, but don't see the logic behind having `df == (2, 2)` raise (maybe #4576 holds the answer, will look at that more closely)