Add `as_frame` to `sklearn.datasets.fetch_20newsgroups`

### Describe the workflow you want to enable

I would like to load the 20 newsgroups dataset as a dataframe in one line of code:
```
X, y = sklearn.datasets.fetch_20newsgroups(return_X_y=True, as_frame=True)
```

### Describe your proposed solution

Add the argument `as_frame` to `sklearn.datasets.fetch_20newsgroups` to make the function behave similar to other data loading functions such as [`fetch_openml`](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_openml.html) or [`fetch_covtype`](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_covtype.html#sklearn.datasets.fetch_covtype).

### Describe alternatives you've considered, if relevant

Manually casting to a dataframe:
```
In [11]: X, y = sklearn.datasets.fetch_20newsgroups(return_X_y=True)                                                                                                                                         

In [12]: type(X)                                                                                                                                                                                             
Out[12]: list

In [15]: import pandas as pd                                                                                                                                                                                 

In [19]: pd.DataFrame(X, dtype='str')                                                                                                                                                                        
Out[19]: 
                                                       0
0      From: lerxst@wam.umd.edu (where's my thing)\nS...
1      From: guykuo@carson.u.washington.edu (Guy Kuo)...
2      From: twillis@ec.ecn.purdue.edu (Thomas E Will...
3      From: jgreen@amber (Joe Green)\nSubject: Re: W...
4      From: jcm@head-cfa.harvard.edu (Jonathan McDow...
...                                                  ...
11309  From: jim.zisfein@factory.com (Jim Zisfein) \n...
11310  From: ebodin@pearl.tufts.edu\nSubject: Screen ...
11311  From: westes@netcom.com (Will Estes)\nSubject:...
11312  From: steve@hcrlgw (Steven Collins)\nSubject: ...
11313  From: gunning@cco.caltech.edu (Kevin J. Gunnin...

[11314 rows x 1 columns]

```

### Additional context

The [string dtype](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.StringDtype.html#pandas.StringDtype) has been added in version 1.0 and the [minimal version for pandas in sklearn 1.1 will be 1.0.5](https://scikit-learn.org/dev/install.html#installing-the-latest-release) so I believe this should be possible to add.

CC @louquinze

COMMENT:
Thanks for the prompt answer!

> I think the output should be a pandas Series to match the semantics of the "list of strings".

I don't think I understand the reasoning behind this. Why would a series be preferable from a usage point (assuming that #16994 is merged)? Ideally, I would like to do something like:
```
X, y = sklearn.datasets.fetch_20newsgroups(return_X_y=True, as_frame=True)
pipeline = sklearn.pipeline.make_pipeline([
    sklearn.feature_extraction.text.CountVectorizer(), 
    sklearn.ensemble.RandomForestClassifier()],
)
pipeline.fit(X, y)
```
in which the 20 newsgroups dataset is now treated the same way as any other dataset that is loaded with the `sklearn.datasets` module.

Labels: New Feature, module:datasets, Pandas compatibility