Implement a light version of "git rev-list"

Try hard to avoid calling "git rev-list" from git.rev_list().  Building
on the previously committed lighter list_refs() and on CatFile, we can
now look up revisions using the midx infrastructure.

The original implementation of rev_list() is left in place, so we can
fall back on it for rare cases.  This also allows us to simply unit-test
using the fallback as a reference (see tgit.py).

Because PackIdxList is currently a somewhat awkward flavour of
singleton, and CatFile doesn't hide that, we couldn't just create a
local instance of CatFile.  For now, then, rev_list() requires you to
pass it a CatFile instance.  I'd hope to refactor that ASAP.

Results in a fairly large repository (>400 idx files, and a 2.3GB midx)
when simply calling "bup ls":

current master, cold disk cache: ~40 seconds
this commit, cold disk cache:    ~12 seconds
current master, warm disk cache: ~1.5 seconds
this commit, warm disk cache:    ~0.15 seconds

Signed-off-by: Yung-Chin Oei <yungchin@yungchin.nl>