Erase a useless macro
Remove unused function item::is_other
Remove unused function is_edible,

Check for this == null, undefined behaviour awaits.
Remove item::clone and use the copy constructor instead.
Add consistency checking for vehicle parts.
Cache weight in vehicle part info.

Also avoid direct access to the item_controller in vehicle class when getting the weight of the part.
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.