get all craftings of the same priority, and split evenly between them

2 loops, the first tries 1/n split, the next does a normal pass, if
there were requests that couldn't be completed.

also updated the workWeightedSorted to take priority into account, and
have a variable distance weight -- 0 = don't take distance into account,
1 = 64 backlog == 1 distance. crafters use 0, providers use 1.

Core of crafting is identical code, just indented (see
white-space-ignoring comaprison)

IHavePriority will be added to modules later, so that provider modules
can have priority.