scheduler_affine: Store cores with CPU bound threads separately

This is preparation for small task packing. We want to have as many idle
cores as possible. To achieve that we put all threads on the most heavily
loaded core (so the other ones can become idle). However, we don't really
want to do that if there are CPU bound tasks and if any of the cores
becomes overloaded.
kernel/util: Fixes in [MinMax]Heap implementation
scheduler_affine: Put small tasks on a single core