ERR: improve setitem error message for DatetimeArray
This is a small detail, but currently we see this kind of error message:

```python
>>> ser = pd.Series(pd.arrays.DatetimeArray(np.arange(10, dtype="i8") * 24 * 3600 * 10**9))
>>> ser.searchsorted(["foo", "baz"])
TypeError: value should be a 'Timestamp', 'NaT', or array of those. Got 'StringArray' instead.
>>> ser.searchsorted(np.array([1, 2, 3]))
TypeError: value should be a 'Timestamp', 'NaT', or array of those. Got 'IntegerArray' instead.
>>> pd.options.mode.string_storage = "pyarrow_numpy"
>>> ser.searchsorted(["foo", "baz"])
TypeError: value should be a 'Timestamp', 'NaT', or array of those. Got 'ArrowStringArrayNumpySemantics' instead.
```
(and same error message is used for the array's `__setitem__`)

I personally don't like that the error message uses the array class names (those are not exactly private, but still not something users typically have to work with directly), and I think in general we should try to write our messages in a more generic, user-friendly way (what the user wants to know here is that they provided data of a wrong data type).

With this small PR, the above message become the following, respectively:

```
TypeError: value should be a 'Timestamp', 'NaT', or array of those. Got string array instead.
TypeError: value should be a 'Timestamp', 'NaT', or array of those. Got Int64 array instead.
TypeError: value should be a 'Timestamp', 'NaT', or array of those. Got string array instead.
```

(and as a bonus, the testing actually became easier)
Thanks @jorisvandenbossche 