C Functionality for Accessing DataFrame Values in Column Order
This is very rough and was a little hesitant to even push here, but figured worth opening up to feedback.

The main motivation for this PR is to get block management out of the JSON serializer, but it could potentially be extended beyond that for external uses

The gist of this is that we can hold a struct `PdOrderedArrays` which gives the length of the DataFrame and sequential access to Numpy arrays that mirror what the user sees when dealing with a DataFrame, all by deconstructing the blocks that already exist down in some C functions
Hello @WillAyd! Thanks for opening this PR. We checked the lines you've touched for [PEP 8](https://www.python.org/dev/peps/pep-0008) issues, and found:

* In the file [`pandas/tests/frame/test_native.py`](https://github.com/pandas-dev/pandas/blob/132d59982882da91da6c78c142991eeba2f880e8/pandas/tests/frame/test_native.py):

> [Line 13:5](https://github.com/pandas-dev/pandas/blob/132d59982882da91da6c78c142991eeba2f880e8/pandas/tests/frame/test_native.py#L13): [E265](https://duckduckgo.com/?q=pep8%20E265) block comment should start with '# '



 Is doing this in cython not an option?  i guess including it in the json code would be troublesome?

Do you envision this being used outside of the json code?  e.g. core.internals?

FWIW `BlockManager.shape` is surprisingly slow in some recent profilings, so optimizing it sounds good. > Is doing this in cython not an option? i guess including it in the json code would be troublesome?

Truthfully didn't think much about that option, but maybe. I personally find this easier and think going the Cython route would still require a lot of C "bridging" (particularly to manage memory) though I'm probably biased by the amount of time I've spent in the JSON extension recently

> Do you envision this being used outside of the json code? e.g. core.internals?

For sure; would still have to evolve and wouldn't be something tackled at the outset, but I think giving third party developers a C API to the DataFrame could open up a lot of things > going the Cython route would still require a lot of C "bridging"

Yah, ive never gotten this to work myself I'll reopen later when more polished