ENH: let get_dummies take a DataFrame

Closes https://github.com/pydata/pandas/issues/8133

Thoughts? I encode every column with `object` dtype. You can control the ones that get encoded with `categorical_variables`. The encoded columns are `concat`ed to the columns that don't need encoding.

`prefix` and `prefix_sep` can be passed as a string, list, or dict mapping column names to strs.

```python
In [1]: from pandas import *

In [2]: df = DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],
                        'C': [1, 2, 3]})

In [3]: df
Out[3]: 
   A  B  C
0  a  b  1
1  b  a  2
2  a  c  3

In [4]: get_dummies(df)
Out[4]: 
   C  A_a  A_b  B_a  B_b  B_c
0  1    1    0    0    1    0
1  2    0    1    1    0    0
2  3    1    0    0    0    1

In [5]: get_dummies(df, prefix=['from_A', 'from_B'])
Out[5]: 
   C  from_A_a  from_A_b  from_B_a  from_B_b  from_B_c
0  1         1         0         0         1         0
1  2         0         1         1         0         0
2  3         1         0         0         0         1

In [6]: get_dummies(df, prefix={"A": 'from_A', "B": 'from_B'})
Out[6]: 
   C  from_A_a  from_A_b  from_B_a  from_B_b  from_B_c
0  1         1         0         0         1         0
1  2         0         1         1         0         0
2  3         1         0         0         0         1

In [7]: get_dummies(df, prefix_sep='.')
Out[7]: 
   C  A.a  A.b  B.a  B.b  B.c
0  1    1    0    0    1    0
1  2    0    1    1    0    0
2  3    1    0    0    0    1

In [8]: get_dummies(df, prefix_sep='.', categorical_variables=['A'])
Out[8]: 
   B  C  A.a  A.b
0  b  1    1    0
1  a  2    0    1
2  c  3    1    0
```
FYI this is the same as current behavior (master):
`s` is a Series.

```python
In [10]: pd.get_dummies(s, dummy_na=True, prefix='A')
Out[10]: 
   A_a  A_b  A_c  A_nan
0    1    0    0      0
1    0    1    0      0
2    1    0    0      0
3    0    0    1      0
4    0    0    0      1
```
I can fix if you want, but it will be an API change. The problem is that str(np.nan) is called.