gitk: Implement multiple views
With this, gitk can know about the graphs for multiple sets of files
and directories of interest. Each set of files/dirs and its graph is
called a "view". There is always the "All files" view, which is the
complete graph showing all commits. If files or dirs are specified
on the command line, a "Command line" view is automatically created.
Users can create new views and switch between them, and can delete
any view except the "All files" view.
This required a bit of reengineering. In particular, some more things
that were arrays have now become lists. The idrowranges array is still
used while the graph is being laid out, but for rows that have been laid
out we use the rowrangelist list instead. The cornercrossings and
crossings arrays no longer exist, and instead we compute the crossings
when needed (in assigncolor).
Still to be done: make the back/forward buttons switch views as necessary;
make the updatecommits function work right; preserve the selection if
possible when the new view has to be read in; fix the case when the user
switches away from the current view while we are still reading it in
and laying it out; further optimizations.
Signed-off-by: Paul Mackerras <paulus@samba.org>