API: Add DataFrame.assign method
Closes https://github.com/pydata/pandas/issues/9229

signature: `DataFrame.transform(**kwargs)`
- the keyword is the name of the new column (existing columns are overwritten if there's a name conflict, as in dplyr)
- the value is either
  - called on self if it's callable. The callable should be a function of 1 argument, the DataFrame being called on.
  - inserted otherwise

``` python
In [7]: df.head()
Out[7]: 
   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

In [8]: (df.query('species == "virginica"')
           .transform(sepal_ratio=lambda x: x.sepal_length / x.sepal_width)
           .head())
Out[8]: 
     sepal_length  sepal_width  petal_length  petal_width    species  \
100           6.3          3.3           6.0          2.5  virginica   
101           5.8          2.7           5.1          1.9  virginica   
102           7.1          3.0           5.9          2.1  virginica   
103           6.3          2.9           5.6          1.8  virginica   
104           6.5          3.0           5.8          2.2  virginica   

     sepal_ratio  
100     1.909091  
101     2.148148  
102     2.366667  
103     2.172414  
104     2.166667  
```

My question now is
- How strict should we be on the shape of the `transformed` DataFrame? Should we do any kind of checking on the index or columns?
