Rename container member of it_ammo and it_comest to default_container.

Fix a bug in the consistency checking in item_factory: check tool != null and tool exists.

Add checking for it_ammo container being valid.
Prevent removal of shoulder strap from worn gun.

Also remove an outdated debug message. It does not matter whether the item is armor, the item functions used there will work fine for non-armor.
Replace access to item type with access to item itself.
Move the artifact deserialize constructors into the source file.
Prepare the item constructor for items of multiple types:

Instead of assuming that is_* of the item type will only be true for exactly one function (either tool or gun or gunmod or ...) it checks all types.
This allows proper initialization for all types in one item.

Also do the same thing in item::info.

Remove redundant writing of charges=-1, this is already done by item::init.
And the check should be directly for count_by_charges, because that what's important here: starting with item::charges > 0 instead of the default -1.
Combine code for food item info:

food in a container and food outside of it uses the same code now.
Avoid direct usage of it_container::contains

Use item::get_remaining_capacity_for_liquid instead.
Implemented the item slot for container items:

This slot stores container content size (not item size).
Implemented the item slot for armor items:
Add armor slot to some bows to make them wearable.
Add armor slot data to wearable containers.

Removes the IS_ARMOR tag because the presence of the armor slot data makes the item armor.