Remove useless code.
Use idle to total ratio as the softest score.

Provides much better guidance.
Don't calculate start dates based on critical path duration, but based
on the more accurate theoretical max duration.
Go back to the original softest score algo, since it was giving the best
results anyway.
Don't fetch constant data all the time.
Store resource requirements in an array for a performance boost.
Trade memory efficiency for a performance increase.
With the increased efficiency, we can now afford a lower TMD multiplier.
Re-benchmark.