Fix item disassembly/butchering check crashes & bogus results

Stumbled on this as I tried to butcher a corpse that had a charcoal smoker, resulting in a segfault.. The loop logic is completely bogus, not properly iterating through both vector levels and with a broken stop condition. It shows up pretty badly on the new smoker recipe, probably because it has a single set of four possible tools.

Interrestingly enough, this would mean that for the past three months or so, disassembling an item could only possibly have been done with the first item of a possible tool set -- eg if a recipe requires (screwdriver or wrench) and (hammer), you would need a screwdriver and a hammer -- without possibility to use the wrench.
Just nitpicking, but that's a needless copy of the vector. Also what's so bad about the current loop header:
`for (...::iterator tool = it->begin(); tool != it->end(); ++it)`
The new code makes essentially the same.

And FYI: this was recently changed by #8066