Update 53: Debugging and refactoring.

Many bugs in the label matching algorithm have been fixed!

- In staticSearchplan, when matching a non-root node, the rule node
  was obtained by indexing into the edge list of lhs instead of the
  node list.

- matchNode did not check if index >= 0 before looking up the old host
  node.

- The graph querying functions that found nodes or edges by their label
  class were not updated to the hash key format with G_INT_TO_POINTER.

- The freeing functions of assignments, variable lists and mappings were
  incorrect.

- lookupValue and lookupType compared strings with == when strcmp should
  have been used.

- isSuffix and isPrefix reported a malloc error if the pointer returned
  was *not* NULL.

- verifyAtomVariable did not allocate memory to atom_copy.

- Functions called by staticSearchplan now take their assignment argument
  by reference to ensure that any updates to the assignments are
  preserved.

- There were several bugs concerning the handling of empty lists. In
  particular, the representation of an empty list as a NULL pointer is
  erroneous because the result of lookupValue returns NULL if either no
  value is found or if the value found is the empty list. This is fixed
  by representing empty lists as a GList containing a single ListElement
  with type EMPTY.

- verifyListVariable was not copying the list correctly (list->data in
  the loop instead of list_to_copy->data).

- addVariable returned void instead of a VariableList*.