Remove item::clone and use the copy constructor instead.
Move enumerations art_effect_passive and artifact_natural_property into enums.h

This allows including only that header and not the artifact.h header.
The artifact header includes the itype.h header, which is thereby included in nearly all source files.
Move enum item_cat enum to enums.h

So inventory.h can use it without including itype.h (it does not need to know what itype is).
Move morale_point::name into player.cpp

Remove the parameter morale_data[], it can be used directly inside of player.cpp
Move Item_factory::nname into class item and make it static.
Move Item_factory::count_by_charges into class item

Remove the redundant logic in item::count_by_charges, instead use the virtual function of itype.
Remove include of artifact.h in inventory.h

The function inventory::has_artifact_with is moved into a lambda inside of player.cpp
This encapsulates the has-artifact look up inside the player class.
Move access to it_comest::spoils into a function of item class.
Move access to it_armor::storage into a function of item class.
Move access to it_armor::encumber into a function of item class.
Move access to it_armor::coverage into a function of item class.
Move access to it_armor::warmth into a function of item class.
Move access to it_armor::thickness into a function of item class.
Move access to it_armor::env_resist into a function of item class.
Move access to it_armor::is_power_armor into a function of item class.
Move access to itype::techniques into a function of item class.
Move access to itype::m_to_hit into a function of item class.
Move access to itype::charges_to_use() into a function of item class.
Move access to itype::id into a function of item class.

Use item::is_null() instead of comparing item type id with "null".
Erase some pointless casts to itype_id, which the value of itype::id already is.
Avoid direct usage of it_container::contains

Use item::get_remaining_capacity_for_liquid instead.