PERF: fastpath DataFrame constructor from BlockManager
When trying to make `fast_apply` unnecessary I found that there is non-trivial overhead in the constructors that we can avoid.  Moreover, since users shouldn't be passing BlockManagers around anyway, we _might_ be able to get that case out of the DataFrame constructor entirely.

```
In [2]: ser = pd.Series(range(5))                                                                                                                                        
In [3]: df = ser.to_frame()                                                                                                                                              
In [4]: mgr = df._mgr

In [5]: %timeit pd.DataFrame(mgr)                                                                                                                                       
2.08 µs ± 51.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

In [6]: %timeit pd.DataFrame._from_mgr(mgr)                                                                                                                             
1.26 µs ± 17.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
```
