Clean up.
halve crafting tree generation costs in most cases

by assuming ingredients will be available, and only deailing with the
missing onces.

also changed getRoutersInterestedIn to return a generic collection -
most of the cost of that function is adding to a set, we might be able
to change this to a different approach in a later commit.
replace the cost of the tree-set merge with an array set

more than a few null-checks instead. may return a bitset, so that the
cost of skipping nulls is reduced.
perhaps use a bitset to flag the routers?