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:
I think this is reasonable to add. In this case, I think the output should be a pandas Series to match the semantics of the "list of strings". As for the name of the series, it could be "post".

As an aside, if the output is a pandas series, then `as_frame` is not the best kwarg name.

(Also our vectorizers do not work with 2d data yet: https://github.com/scikit-learn/scikit-learn/pull/16994)

Labels: New Feature, module:datasets, Pandas compatibility