API: ArrowDtype.type
cc @mroeschke we discussed this one of the pyarrow testing PRs.

Still has some failing `pandas/tests/extension/test_arrow.py::TestBaseInterface::test_contains` tests where eyeballs would be welcome.

ATM this returns Timestamp/Timedelta when the pyarrow unit is "ns" and pydatetime/pydatetime otherwise.  We could reasonably update that to be always-Timestamp/Timedelta.
So this is breaking the `float[pyarrow]` test_contains test because `EA.__contains__` does

```
        if is_scalar(item) and isna(item):
            if not self._can_hold_na:
                return False
            elif item is self.dtype.na_value or isinstance(item, self.dtype.type):
                return self._hasna
```

In the relevant case item is np.nan.  This PR makes it so that the `isinstance(item, self.dtype.type)` check is True, the pyarrow (and nullable) dont want to treat np.nan as isna.  One option is to override `ArrowArray.__contains__`.  More generally, I think we're going to need something like EADtype._is_valid_na_for that `missing.is_valid_na_for_dtype` can dispatch to. Thanks @jbrockmendel 