Improve performance in task cost calculation
Slighty faster Period.compareTo()
Improve performance of resource utilization calculations

Leasson learned from Optaplanner's machinereassignment.
Properly account for startups, shutdown and idle
ActiveTask not necessary anymore
Two machines are never equal

Provides performance speedup of never calling equals() or hashcode()
Fix bugs in the scoring function
Remove TaskConsumption as it is no longer necessary
Replace construction heuristics with a custom initializer

CH wasn't scaling for the large use cases.
Fix off-by-one
Disable swap move for start periods

Otherwise, this will break hard constraint. Some tasks may be moved
before their earliest start or past their latest end.
Completely randomize the solution initializer