BUG/API (string dtype): return float dtype for series[str].rank()
Noticed in https://github.com/pandas-dev/pandas/pull/59758#discussion_r1750734166

This is partially fixing a bug, because currently for cases where we actually need a float result but try to convert it back to an int, we get an error:

```python
In [58]: pd.Series([2, 1, 1]).rank()
Out[58]: 
0    3.0
1    1.5
2    1.5
dtype: float64

In [59]: pd.Series(["2", "1", "1"], dtype="string[pyarrow]").rank()
...
File ~/scipy/repos/pandas/pandas/core/arrays/string_arrow.py:445, in _convert_int_result(self, result)

File ~/scipy/repos/pandas/pandas/core/arrays/numeric.py:93, in NumericDtype.__from_arrow__(self, array)
---> 93     array = array.cast(pyarrow_type)
 ...
ArrowInvalid: Float value 1.5 was truncated converting to int64
```

But in general we should also decide what to do return here. For our default dtypes, it seems we decided in the past to simply always return float64, even for rank `method`s that could return ints. 
For the ArrowDtype, then, it was decided to keep the dtype returned by pyarrow: https://github.com/pandas-dev/pandas/pull/50264

For now, this PR updates `StringDtype` to simply always return float64, to be consistent between the pyarrow vs python storage. But we could also consider, for those newer dtypes, to actually keep the distinction between float/int results (just not always int like it is done now). 
> Is it worth an entry in the 2.3.0 whatsnew?

Yes, good idea, added one. Thanks @jorisvandenbossche 