[WIP] ENH/FIX Change Tree underlying data structure

* Memory is managed by numpy and the Python garbage collector where it previously could segfault (#2726).
* Typed memoryviews increase readability while maintaining efficiency.
* A struct array for tree nodes and values array (size indeterminate at compile time) are the only underlying structure, so each node is locally grouped memory, and joblib dumps will save only two numpy files per tree.

Todo (at a minimum):
* a clearer benchmark than the one at https://github.com/scikit-learn/scikit-learn/issues/2726#issuecomment-31881719
* a test for unpickling trees from earlier versions