Reorder files in ROOT.ML

I/O code now comes just after the structures it works on, with the
exception of the XML stuff, which is in its own block.  This will
allow us to use I/O code in tests (eg: describing graphs in JSON).
Rename the test graph structures

Put RG into the names, so that we can construct a seperate test graph
type that can test things like edge data.
Rename test-graph-setup.ML to test-rg-graph-setup.ML
Add a new test graph structure

This has a selection of node and edge data types, including "unit"
types, types with strings and types with LinratAngleExprs.

This should hopefully give us better coverage of various bits of code in
the tests.
Rewrite GRAPH tests for new graph type.

This sets up a structure where we essentially test a particular
signature.  There is a functor which tests the functions of the GRAPH
signature on a suitable graph.  We then use this to test the GRAPH
signature function of the Graph, OGraph and BangGraph variants of our
graph type.

Note that this already caught a case where the Graph version of a
function (delete_edge) was correct, but the OGraph version was not (it
threw the wrong exception if there was no such edge).
Use new test graph type for OGraph tests
Ensure edge type compatibility is checked in plugging tests
Remove old file
Remove add_to_vnames/enames/bboxes from graph structures

These are just confusing, as they look like graph mutators but are not,
and only use in debug code (where they are trivial to replicate).
Remove unused functions

Using these is likely to break the graph.
Raise ex in edge_get_other_vertex if given a vertex not on the edge
Consider edge directedness in Graph.exact_eq
More consistent test coverage for Graph interface.
Convert !-graph tests to new test graph type
Convert graph JSON-parsing tests to new graph structure
Enforce edge directions and types for rules

Rule.mk now checks that inputs correspond to inputs, outputs to outputs,
undirected boundaries to undirected boundaries, and that the relevant
edge types match up.  Isolated points are also prohibited (which ensures
normalisation won't change the boundary).

Tests for this are now included, which all use the new test graph type.