Multiprocessing refactor + misc fixes

Refactored multiprocessing to be syncronous (better pattern for what we were doing)

To avoid overhead, splits up the number of matches into number of processes groups. (eg: 4 processes 100 matches = 25 each; 3 processes 100 matches = 34/33/33 matches)
other misc fixes/syntatic refactors