PERF: DataFrame construction
```
In [1]: from asv_bench.benchmarks.frame_ctor import *

In [2]: cls = FromArrays

In [3]: self = cls()

In [4]: self.setup()

In [5]: %timeit self.time_frame_from_arrays_int()
6.21 ms ± 184 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)  # <- master
3.27 ms ± 182 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)  # <- PR

```
cool i would actually add a release note about this as this is a significant perf improvement. does this hold more generally with other construction asv's?

also doe you think its the removing asserts or the changes in not using is_sparse that are the big wins here? (guessing its the asserts) > also doe you think its the removing asserts or the changes in not using is_sparse that are the big wins here? (guessing its the asserts)

I forget the exact numbers, but remember being surprised how big a difference the is_sparse change made I'm seeing failure for the groupby.apply doctest on master. The condition that leads to raising an error is

    if newb.shape != self.shape:

Looks like shape is being cached here - might be related? good catch, that caching should be reverted (and ideally a non-doctest test implemented)