Instead of storing the arrays into an array of void*, we use a tuple<> instead. This improves debugging because now the tuple<> has pointer with the correct types. It also improves most of the code except `push_back` which now relies on a hack -- this is the only place where I'm not able to resolve the array strictly at compile time, even if in practice it is.