PERF: quantile now operates per block boosting perf / fix quantile with nan
closes #11623
closes #13098
There is a slight API change in that the returned Series are now named by the quantile.

this PR

```
In [1]: df = DataFrame(np.random.randn(1000, 3), columns=list('ABC'))

In [2]: %timeit df.quantile([0.1, 0.5], axis=1)
1000 loops, best of 3: 830 µs per loop
```

0.18.1

```
In [3]: df.quantile([0.1, 0.5], axis=1)
In [1]: df = DataFrame(np.random.randn(1000, 3), columns=list('ABC'))

In [2]: %timeit df.quantile([0.1, 0.5], axis=1)
1 loop, best of 3: 317 ms per loop
```

cc @sinhrks 
 @sinhrks this also resolves some thorny issues with `.replace` and datetime w/tz (now the conversion happens at a much lower level).
 Thanks. I've at a loss how to achieve the behavior you did in `reduction`. 

BTW, we don't seem to test `.quantile(axis=1)` with mixed dtype currently. It's nice to be added.
 ok added test for mixed, though not a whole lot you can do with it.
