API: add a setattr method to NDFrame to assist with piping
I frequently come into situations where I have to break up piping, because piping doesn't work on attributes:

```python
>>> new_df = (df.groupby(...)
...             .pipe(...)
>>> new_df.index.name = 'index_name'
>>> new_df.columns = pd.CategoricalIndex(new_df.columns)
>>> new_df = new_df.pipe(...)  # and so on...
```

I think it would be cleaner if NDFrame had a ``setattr`` method that returns ``self``. Then the above would become:

```python
>>> new_df = (df.groupby(...)
...             .pipe(...)
...             .setattr('index.name', 'index_name')
...             .setattr('columns', lambda x: pd.CategoricalIndex(x.columns))
...             .pipe(...)  # and so on...
...             )
```

The first argument to ``.setattr`` is a string and can be dot-seperated, and the second parameter is called with ``self`` as its first argument if a callable.

I think this would make piping cleaner in many cases.

Opinions?