The core of the graphing functionality is in the PBGitGrapher class. This
class has one function - parseCommits() that takes an NSArray of commits and
creates a PBGraphCellInfo for each commit. These PBGraphCellInfo are stored in
an array that can later be accessed using the cellInfoForRow: function.

The PBGraphCellInfo has only basic information -- The column the commit
associated with this commit should be drawn in, and other lines that should be
drawn.

These lines are in an array of PBLines. A PBLine has a few pieces of
information -- a start column, an end column and whether the line should be
drawn on the top or bottom part of the row. Furthermore, it has a colorIndex
to indicate the color the line should be given. Note that this number
increases forever, so you can modulo it with the number of colors you have.

In the PBGitWindowController, the -
(void)tableView:willDisplayCell:forTableColumn:row: is implemented which sets
the correct PBGraphCellInfo for the cell to be drawn. This cell is of the
class PBGitRevisionCell, which has the actual drawing implementation.

The basic algorithm for the graphing is like this:

For each commit
	For each previous column
		If this commit should be in this column
			mark this position and set this commits first parent
 			as the next commit for this lane
		Else if this commit should be in a previous column
			add a line to that column and discard the previous
			column
		Else
			Keep this column for the current row
	For each parent of this commit
		If it has not been displayed, add it as a column