ENH: improve the resulting dtype for groupby operations on nullable dtypes
Follow-up on https://github.com/pandas-dev/pandas/pull/37433, and partly related to https://github.com/pandas-dev/pandas/issues/37493

Currently, after groupby operations we try to cast back to the original dtype when possible (at least in case of extension arrays). But this is not always correct, and also not done consistently. Some examples using the test case from the mentioned PR using a nullable Int64 column as input:

```
In [1]: df = DataFrame(
   ...:     {
   ...:         "A": ["A", "B"] * 5,
   ...:         "B": pd.array([1, 2, 3, 4, 5, 6, 7, 8, 9, pd.NA], dtype="Int64"),
   ...:     }
   ...: )

In [2]: df.groupby("A")["B"].sum()
Out[2]: 
A
A    25
B    20
Name: B, dtype: Int64

In [3]: df.groupby("A")["B"].std()
Out[3]: 
A
A    3.162278
B    2.581989
Name: B, dtype: float64

In [4]: df.groupby("A")["B"].mean()
Out[4]: 
A
A    5
B    5
Name: B, dtype: Int64

In [5]: df.groupby("A")["B"].count()
Out[5]: 
A
A    5
B    4
Name: B, dtype: int64
```

So some observations:

* For `sum()`, we correctly have Int64 for the result
* For `std()`, we could use the nullable Float64 instead of float64 dtype
* For `mean()`, we incorrectly cast back to Int64 dtype, as the result of mean should always be floating (in this case the casting just happened to work because the means were rounded numbers)
* For `count()`, we did not create a nullable Int64 dtype for the result, while this could be done in the input is nullable