Vector array
alt to #16193, appends to #16222
closes #15854

@chris-b1 comment from #16222 : This has the downside of introducing more manual memory management, but on the plus side removes the interim gil acquisition from some algos.

I couldn't figure out how to append to #16222, so I started another pull request, sorry, but added fixes (the missing ``data.m = data.n`` caused a segfault), more checks, and an improved test

FWIW, this allows PyPy to pass the hashtable tests 