Implement a running time estimator, so we can get an idea of how long things will take to run without actually running them. This should take in the number of cores and the speed of the processor, and derive some rough expected running time from that.