dirstate-v2: Add support when Rust is not enabled
This wires into dirstatemap the parser and serializer added in previous
changesets. The memory representation is still the same, with a flat dict
for DirstateItems and another one for copy sources. Serialization always
creates a new dirstate-v2 data file and does not support (when Rust is not
enabled) appending to an existing one, since we don’t keep track of which
tree nodes are new or modified. Instead the tree is reconstructed during
serialization.
Differential Revision: https://phab.mercurial-scm.org/D11520