Heavy code restructuring for processes and threads per process support.
Part 1: multiple threads per process can run a simple arraywalk
a lot of the timing information that existed previously has still to be
re-added, along with a lot of support for different options