Let the refactoring begin.

Fixed some typo and type errors. Still missing some functionality and some
properties still don't hold.
Added new exception CorruptedStructureException.

Use it for when an invariant about a structure suddenly fails to hold.
Added more checks and validations in make_neighbor of AdjacencyMatrix.
Introduced new tests in test_add_node of AdjacencyMatrix.

This is to ensure the state of the adjacency matrix as you add nodes. A graph
of islands (i.e., edge_count == 0) should look as follows:

  - The center diagonal (upper-left to lower-right) is all 0.
  - The rest is AdjacencyMatrix.DISCONNECTED .
Added duplicate node check in AdjacencyMatrix.add_node.
Bug on constructing adjacency matrix (already reflected in tests).

The intial cost of going from n1 to n1 (same source and destination) is not
always 0.