Remove unused function item::is_other()
Move the static null-item type into the nullitem function.

Make the function static and visible only to the item class, nobody needs to know this implementation detail.
Also make the null-itype a static object, not a pointer.
This makes sure the memory is cleaned when the game closes, but never before.
Improve is_null check by comparing to the static null-item pointer before checking the actual type id.
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
Add item::get_random_material

to move it_armor::(bash|cut)_dmg_verb out of itype, now it can be used on
the random material given by the item class. This allows to get the damage
verb without knowing the itype class.
Add item::get_base_material

To move itype::dmg_adj out of itype.h, now the damage adjective can
be retrieved from the material returned from the item object without
knowing the itype class.
Add item::type_name to get the name without prefixes

Similar to item::nname, it returns the item type name without item specific properties (damage, ...).
But it can return special names for blood and corpse items and for items that have a unique name.
It uses the already loaded item type pointer of the item instance.
Add item::make_handed to setup a handed item

This replaces the duplicated code in map.cpp and item::item.

Use the existing enumeration handedness (from bodypart.h), which is also used in the constructor of items.

Remove itype::is_sided as not needed (used at one place only, converts to it_armor when it's already an it_armor).
Remove direct usage of it_artifact in player.cpp

Add callbacks in the item class that are called when the artifact messages should be displayed.
The callbacks do what was previously done in player.cpp, but the item class knows about the artifact class anyway.
Remove direct usage of itype in various files

Only where possible, because some code still refers to specific itype types.

Use the equally good functions of the item class instead:
item::volume(),
item::weight(),
item::is_*()
item::is_weap() contains basically the same check as previously written.
item::has_quality instead of manually querying it.
...

Remove direct usage of artifact in mondeath.cpp, map::spawn_artifact does the same as the previous code.
Coverage bitsets depend on num_bp instead of a hardcoded number.

This actually decreases the bitset to 12 bits because num_bp is 12, and
there are only 12 (real) body parts. The 13th part is num_bp which
should not appear in the bitset anyway.

The json read/write functions for bitsets are templated, but as they are still defined inside json.cpp, they have to be instantiated there to be usable in other compilation units.
Implement wearable non-armor items

item::is_armor will now also check for the presence of a "IS_ARMOR" flag, and if so consider the item armor.

The flag is used in a shoulder strap item, which is a gun mod. Attached to a rifle it makes the rifle a wearable item as is_armor will now return true for that modified rifle.

Note: it's now possible to directly wield a worn item without taking it of first. This is required to effectively use shoulder straps.

Note: it still needs additional data for encumbrance etc.