PERF: improve find_common_type perf for special case of all-equal dtypes
In several benchmarks, the `find_common_type` spends quite some time on checking if all dtypes are equal, which can be improved a bit by 1) assuming all dtypes are actual dtypes (`is_dtype_equal` is generic and will first convert the input to a dtype, giving overhead) and 2) writing the for loop generator in small cython helper:

```python
types = [np.dtype("float64") for _ in range(10000)]

In [2]: %timeit pd.core.dtypes.cast.find_common_type(types)
7.18 ms ± 627 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)  # <-- master
368 µs ± 10.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)  # <-- PR
```

(based on some testing, both aspects above contribute significantly to the improvement)

nice speedup!
