You too good for std::min?!
Use default constructor, instead of spelling out defaults
Extract Data::asData function

Exposes a Data view on top of std::string. The resulting Data object
should be scoped to the lifetime of the source string.
Drop 'temporary' parameter from Tokenizer::addData

All uses of the function use the default value of 'true', anyway.

(This is paving the way for dropping the 'temporary' member from Data.)
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

The 'temporary' member was used to avoid Data copies: shallow copies
could be made for non-temporary instances. Copies of temporary instances
would allocate their own memory and copy the underlying data.

Data, however, was not (and still isn't) concerned with buffer ownership
and didn't itself handle deletion of referenced data. Having it keep
track of the 'temporary' field meant it imposed additional protocol on
its users, duplicating code for copying and freeing buffers, while
externally managing the internal temporary flag.

As exemplified by Node and Property classes, users would still need to
externally keep track of ownership, cf. m_delete_data_buffer field in
those clases, but how they related to Data::temporary was not entirely
consistent.

In dropping this feature, the only use case no longer supported is that
of feeding the Tokenizer with non-temporary data to prevent copies for
the tokenized input. As far as I can see this feature wasn't being used
and its implementation should be re-visited.
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.