implement assert_tzawareness_compat for DatetimeIndex
closes #18162 

ATM comparing tzaware `DatetimeIndex` with tznaive DTI fails to raise.  This PR implements `_assert_tzawareness_compa`t (which currently exists in `_Timestamp`) in `DatetimeIndex` to fix that.

That in turn causes breakage in `Series.replace`.  There's a small edit in `core.internals` to fix that, but I'm not sure that's the best way to make that work.

There is still one remaining test error in `tests.series.test_indexing.TestSeriesIndexing.test_getitem_setitem_datetimeindex`, which may either represent a bug or a case where tznaive/tzaware rules are relaxed.

```
N = 50
rng = date_range('1/1/1990', periods=N, freq='H', tz='US/Eastern')
ts = Series(np.random.randn(N), index=rng)

lb = "1990-01-01 04:00:00"
rb = "1990-01-01 07:00:00"

>>> result = ts[(ts.index >= lb) & (ts.index <= rb)]
TypeError: Cannot compare tz-naive and tz-aware datetime-like objects
```

Later in the same tests it tries to compare `ts.index` to naive `datetime` objects.  Is this a special case where we are intentionally less strict?