Much improved and fixed craft code.

Craft now properly supports returning item1 or item2, supports
in-container crafting correctly, extra checks added to stop crafting if
the result item won't fit in the target destination for some reason.
Removed comments explaining code flow, they were out of date and I
didn't bother to write new ones.