Each NodeSequence object has an iterator which is "walked".
As an iterator is walked one obtains nodes from it.
As those nodes are obtained they may be cached, making
the next walking of a copy or clone of the iterator faster.
This field (m_cache) is a reference to such a cache,
which is populated as the iterator is walked.
Note that multiple NodeSequence objects may hold a
reference to the same cache, and also
(and this is important) the same iterator.
The iterator and its cache may be shared among
many NodeSequence objects.
If one of the NodeSequence objects walks ahead
of the others it fills in the cache.
As the others NodeSequence objects catch up they
get their values from
the cache rather than the iterator itself, so
the iterator is only ever walked once and everyone
benefits from the cache.
At some point the cache may be
complete due to walking to the end of one of
the copies of the iterator, and the cache is
then marked as "complete".
and the cache will have no more nodes added to it.
Its use-count is the number of NodeSequence objects that use it.