Real numba refactoring

I'm putting this up as a pull request so that folks can catch whatever bugs they find before I get too far with refactoring the whole thing.

I also have a question: I know how Git handles merge conflicts in text files, but what about binary ones? I'm namely worried that both Matt and I make changes to `exp_results.csv.gz` and when we try to merge them only one person's version will prevail. @talumbau, any intuitions?
I don't think there is a gain here because `np.maximum` is already a ufunc. This doesn't hurt though, but just for future reference.