PERF: check first for recognized scalars in DatetimeArray._validate_scalar
Something small, but most of the time we will be setting with actual scalars, so putting that first improves this case a bit:

```python
arr = pd.date_range("2012-01-01", periods=3).array
scalar = arr[0]

In [3]: %timeit arr._validate_setitem_value(scalar)
3.04 µs ± 58.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)  # <-- master
2.08 µs ± 27.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)  # <-- PR
```

(it gives a noticeable difference in eg fillna benchmarks)
The second commits gives another small improvement (the `_assert_tzawareness_compat` just before already ensures that self and other have either both a tz or both not):

```python
In [3]: %timeit arr._validate_setitem_value(scalar)
3.04 µs ± 58.5 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)  # <-- master
1.85 µs ± 82 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)  # <-- pR
``` thanks. at some point if you can add the collected PR numbers to the whatsnew in the perf improvements section. @jreback they're mostly related to (or most relevant for) ArrayManager, so I should probably start with some actual basic docs about it before starting to mention it in the whatsnew well u can certainly make a section in the whatsnew to indicate that perf for these have changed