fixup! Extract Data::asData function
Use default constructor, instead of spelling out defaults
Treat string literals as immutable persistent data

Data objects from string literals were sometimes marked as temporaries,
which would promote unnecessary memory allocation and data copies. All
such objects are now marked as persistent.
Extract cloneData function to allocate and deep copy Data object

Additionally, this enforces that (allocated) clones are considered
ephemeral (i.e. temporary), disallowing leaks of shallow copies.
Drop Data::temporary data member

XXX <insert commit reasoning here>
fixup! Extract cloneData function to allocate and deep copy Data object
Make Property::operator= resilient to self-assignment
Drop Property::m_delete_data_buffer, it's always true

But the real question is: what's the point of Property? This is used for
keys in ObjectNode, but otherwise seems to be the same as a generic Node
with some syntactic sugar for constructing from std::string and without
any of Node's convenience functions.