ENH: make DataFrame.applymap uses the .map method of ExtensionArrays
Currently `DataFrame.applymap` ignores the `.map`method of `ExtensionArrays`. This fixes that.

Example:
```python
>>> import pandas as pd
>>>
>>> arr = pd.array(["a", np.nan, "b"], dtype=object)
>>> sparse_arr = pd.array(arr.tolist(), dtype=pd.SparseDtype(object))
>>> df = pd.DataFrame(data={'a': arr, "b": sparse_arr})
>>> df.applymap(str.upper, na_action="ignore").dtypes  # main
a    object
b    object
dtype: object
>>> df.applymap(str.upper, na_action="ignore").dtypes  # this PR
a                 object
b    Sparse[object, nan]
dtype: object
```
 
Thanks @topper-123 