rewrote checkCrafting to correctly balance.

now takes into account crafters with 0 load because they can't craft due
to lack of ingredients, and the existing load on a crafter.

split out a seperate class for holding the max craftable, as a pre-calc
step, instead of inside the nested loop.

this is stored in the new class while work was added up, so that further
crafting chains are not needed, once you know the max possible. (the
code for calculateMaxWork is an unmodified version of the removed lines
in checkCrafting)

removed some of the nested loops added by my last attempt at writing
this code.