ErrorCode: added missing code datastore_object_already_exists.
Error: corrected order in error name array.
utility: added enum_cast().
Reworked props; added IO::PropStateStore.

IO::PropType:
	removed 'object_' prefix from members;
	added identity;
	reordered members;
	expanded docs.

IO:
	added PropState;
	renamed SerializationFlags to PropSerializationFlags;
	added PropStateStore.

test: added PropStateStore test.

Object:
	replaced m_storage_state with m_prop_states;
	added get_storage_state() and get_prop_states();
	elided dctor, added prop-supply params to primary ctor.

Rule: mirror Object's primary ctor.
IO/PropStream: moved props to base class, init with m_stream(nullptr).
Data::Metadata: added serialization preconditions, tidied impl.
System::Driver: removed serialize().¹

1: Going to rework this later.
test/io/prop_state_store: added more init case assertions.
IO/PropStream: removed Datastore forward declaration hack.¹

1: This became unnecessary a while ago.
Object: added supplies_prop_* to type_info; reworked :Unit init.

Object::type_info: added supplies_prop_primary and supplies_prop_auxiliary.
Object::Unit: #include <Hord/IO/Prop.hpp> for IO::PropStateStore.

:Object::Unit:
	moved base-class aliases to private scope¹;
	made Unit type_info constexpr;
	pass supplies_ from type_info directly to Object::Unit ctor.

Rule::Unit:
	made PropType::primary the only supplied prop;
	moved ctor def to source file.

doc: corrected error in Data::Metadata::serialize(); misc tidy.

1: Except for Rule::Unit for exposition purposes.
doc: expanded notes for IO::PropType; rewrote desc for Node::Unit.
ErrorCode: merged metadata ECs with serialization, added prop serialization ECs.

ErrorCode:
	renamed metadata_serialization_io_failed to serialization_io_failed;
	elided metadata_serialization_type_invalid, using serialization_data_malformed in its place;
	added serialization_prop_unsupplied;
	renamed serialization_improper_state to serialization_prop_improper_state.
Object: added serialization operations, renamed owner to parent.

Object::Unit:
	renamed 'owner' property to 'parent';
	added scratch data;¹
	added deserialize() and serialize(), implemented base prop serialization.

:Object::Unit: stubbed deserialize_impl() and serialize_impl().

Node::Unit: removed children property.²

1: Need to use a more optimal data structure for this at runtime.

2: This is largely useless.