DataFrame.__init__(..., dtype=dt) makes unnecessary copies
If I have a DataFrame `df` with homogenous type, then `DataFrame(df)` returns a view on the original dataframe. `DataFrame(df, dtype=current_type)` should be identical; but, instead, it makes an unnecessary copy.

```
>>> import pandas
>>> pandas.__version__
'0.8.0'
>>> df = pandas.DataFrame([[1, 2]])
>>> df
   0  1
0  1  2
>>> df[0].dtype
dtype('int64')
>>> view = pandas.DataFrame(df)
>>> view
   0  1
0  1  2
>>> view[0][0] = 100
>>> view
     0  1
0  100  2
>>> df
     0  1
0  100  2
>>> should_be_view = pandas.DataFrame(df, dtype=df[0].dtype)
>>> should_be_view
     0  1
0  100  2
>>> should_be_view[0][0] = 99
>>> should_be_view
    0  1
0  99  2
>>> df
     0  1
0  100  2
```

The same thing seems to happen in the input is an ndarray -- `DataFrame(arr)` returns a view, `DataFrame(arr, dtype=arr.dtype)` returns a copy.
