Cooking takes ingredients' age into account

This makes it so that crafting tracks the age of any spoilable ingredients used, and then combines that with the current turn for the age of the resulting item. Hence, fresh meat becomes fresh cooked meat; barely-rotten meat becomes edible cooked meat; very rotten meat stays rotten after cooking.

Addresses #1039.

This also makes it so that the precise constituent crafting ingredients can be tracked (first 6 commits). This seems independently useful, for stuff like knowing whether a flashlight was made with metal scraps or a plastic bottle.