ENH: Add subset to fillna
#### Is your feature request related to a problem?

When filling NAs, I need to use different methods for different columns or ignore some columns. Filling with different values per column works by passing a dict to `values` but it's not possible to do something similar for `method`-based filling, e.g. bfill `x` and ffill `y` of
```python
>>> df = pd.DataFrame({'x':[1, None, 2]}).assign(y=lambda df: df.x)
>>> df
     x    y
0  1.0  1.0
1  NaN  NaN
2  3.0  3.0
```

#### Describe the solution you'd like

I see 3 options to implement this in pandas (with examples how to solve the task above):

1. Allow the `method` argument of `fillna` to accept a dict mapping column/index-label to requested method (similar to how the `value` argument is working)
   ```python
   df.fillna(method={'x':'bfill', 'y':'ffill'})
   ```
   when dealing with many columns, this will turn into:
   ```python
   df.fillna(method={'col1': 'bfill', 'col2': 'ffill', 'col3': 'nearest', 'col4': 'bfill', 'col5': 'bfill'})
   ```
2. Allow `method` to take a dict which maps methods to lists of column/index-labels. This would allow more-concise code than the 1. option but will also add inconsistency between `method` and `value` arguments.
   ```python
   df.fillna(method={'bfill': 'x', 'ffill':'y'})
   ```
   when dealing with many columns, this will turn into:
   ```python
   df.fillna(method={'bfill':['col1', 'col4', 'col5'], 'ffill':'col2', 'nearest':'col3'})
   ```
3. Add a `subset` argument working the same as with [`dropna()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html) and [`drop_duplicates()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html). This should also be available in the method-specific methods, e.g. [`bfill()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.bfill.html)
   ```python
   df.bfill(subset=['x']).ffill(subset=['y'])
   ```
   and
   ```python
   df.bfill(subset=['col1', 'col4', 'col5']).ffill(subset='col2').fillna(method='nearest', subset='col3')
   ```

#### API breaking implications

There should be none because arguments will added or existing arguments will accept types currently not allowed.

#### Describe alternatives you've considered

It's always possible to re-assign subsets of the data frame, e.g.
```python
df['x'] = df['x'].bfill()
df['y'] = df['y'].ffill()
```
But this involves a lot of boilerplate code which adds noise to the code in total.