Refinements in advance of the Property/ObjectProperty split.
Makefile: use subdirectories of a common bin/ directory.
AI: add Priority enum; make last_speech_schema a SoundSchema.
AIAttackLink: remove Priority enum (to AI).
AnimLight: replace is_/set_light_active methods with light_on field.
Combinable: new object type with stack_count and adjust_stack_count.
CombineMessage: move from Message unit to Types to be with Combinable.
Conversation: add abort_level and abort_priority.
Flash: add *_duration and range fields.
Flavor: add less-than operator.
HUD: make methods static and hide instance; use a std::function to genericize callbacks; add Event enum to replace individual callbacks.
HUDElement: replace individual callbacks with on_event.
Key: inherit from Combinable.
LGMultiBase: return int instead of yet-undefined Object::Number from as_object.
Link: standardize subscribe/unsubscribe args.
LinkChangeMessage: remove NONE from Event; rename get_number to get_link.
Object: add less-than operator; remove stack_count and adjust_stack_count (to Combinable); convert has_refs to a method.
ParameterBase: return bool from set_raw instead of throwing; de-inline the ctor and exists method.
ParameterCache: return pointer instead of reference from get instead of throwing; return bool from set and write_dn instead of throwing.
ParticleGroup: add particle_count and particle_size fields.
Physical: replace lock_*/unlock_* with methods *_lock_to fields.
Property: rename to ObjectProperty; standardize subscribe/unsubscribe args; store real Object.
PropertyChangeMessage: remove NONE from Event; rename get_prop_name to get_property.
Weapon: inherit from Combinable.
Wrap IProperty in a new Property class and use throughout ObjectProperty.