Update 67: Code generation of rule application.

The compiler generates code to apply a rule in three fairly simple
special cases:
(1) LHS is empty: do not generate any matching code, rule
    application code copies the RHS graph into the host graph.
(2) RHS is empty: generate matching code, rule application code
    iterates over the edge and node morphisms, deleting all
    items from the host graph (edges first).
(3) Rule is a predicate: a flag is passed to the matching code
    generator so that it does not emit a call to apply the rule.
    Instead the generated code, upon finding a total morphism,
    frees the morphism and returns true.

Other improvements and bug fixes:
- Added code to transform.c to handle empty LHS/RHS graphs.
- Updated the matching code generator with the new linked list
  structure for deleted (formerly dangling) nodes.
- Fixed a bug in removeEdge: it did not search the whole of the node's
  inedges and outedges arrays because the for loop stopped at
  the in/outdegree as opposed to next in/out edge index.
- Added more invariants and more detailed comments in the graph module.
- Fixed various bugs in the graph module caused by the use of the wrong
  variables to control iteration over node/edge/inedge/outedge arrays.
- Added code to handle the correct matching of looping edges in the
  generate module.