Split runs to save memory
When running with a large number of spins and/or sequences the simulator can run out of memory. This merge request splits such large runs into multiple independent runs. For each such run the number of spins times the number of sequences won't greatly exceed 10 million (using about 240 megabytes).