Track character ordering outside of nodes

In preparation for ordering at the subnode level during the ordering
phase, I needed to create a separate portion of the graph data
structure specifically for recording this order data. In the
javascript version, this is done directly on the nodes, but in this
implementation, that's not possible because changing the ordering
within a Node would result in a new Node. Since we're using Nodes
themselves in Edges and other things, and rely on being able to
check equality, the Nodes must not be changed. To that end, I made
the :characters attribute of the Node record in to a set so that
it's explicitly unordered, and began recording ordering data in the
:characters key of the relevant graph types. The ordering doesn't
actually change yet, but now it can without harming the rest of the
algorithm.