ENH: When using another plotting backend, minimize pre-processing
- [ ] closes #xxxx
- [ ] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

I ran into this while implementing the hvplot backend. In hvplot you can do:

```python
df.hvplot.hist(y='y', by='category')
```

but with the pandas version 

```python
pd.options.plotting.backend= 'holoviews'
df.plot.hist(y='y', by='category')
```

 will fail because `data = data[y]`  is called before the plotting is passed off to the backend. 

Basically it seems like backend writers should be free to get the passed pandas objects with as little interference as possible.


@datapythonista does this seem reasonable to you? I guess it could be perceived as related to those issues if you think the best fix would be to try to know all the options that can accept column names and then reduce the data to only those columns. That will never be sufficient for `hvplot` though because of options like `hover_cols` which `matplotlib` will never have.  

I think the more essential issue is that `pandas.plotting` should do minimal data transforming before handing off the data to the plotting backend. I just wasn't sure whether folks from other backends would agree that we don't want processing done ahead of time. Maybe @jakevdp can comment on what would be best for altair?  I'm happy with that. The way it is now it's based in how the matplotlib backend was implemented when was coupled.

Besides being simpler in the pandas side, I see advantages on passing the whole dataframe, like backends being able to use other columns for hover and things like that.

I think making the changes shouldn't be hard.

@TomAugspurger what do you think? Thanks @jsignell 