IO/IOOps: tidy.
IO::PropStateStore: made accessors constexpr.
System::Context: split broadcast into remote & local; added initiate_pass().¹

1: Most broadcasts probably won't care about the result of the
command, so we can skip local execution & bookkeeping by giving the
stage the next local ID and throwing it at the remote endpoint.
IO/Defs: renamed prop_flag() to prop_type_bit().
IO::PropTypeIterator: new class.
Cmd: simplified command flows.
System::Driver: added get_object_type_info().¹

1: Will add support for other object types later. Type registration is
required to implement Datastore properly.
Object/Defs: added Object::Type serialize().
Cmd::Unit: friended Cmd::StageImpl in HORD_CMD_DEF_OPEN().¹

1: For commands that store private cross-stage data.
Cmd::Stage: default-initialized m_data for default ctor.¹

1: Don't want uninitialized members.. but we can't do much about that.
At least we can say we *tried*.
IO/Ops: fixed null ID erasure in identify_all(), added error log for self-parented objects; tidy.
IO/Ops: corrected state logic in load_prop() and store_prop(), added force param,¹ removed original-state assignment;² doc tidy.

1: We may want to load a prop when it is already initialized or
store a prop when it isn't modified.

2: Object::Unit serialization already assigns prop state.