merge my less-file-change-access branch, which mainly only computes expensive
information (the set of files changed in a revision) when it's actually needed,
but also a bunch of other streamlining and efficiency improvements.