Use git.Export as the base of git.Checkout
To ease the way for distinguishing between cases where we want a
read-only view of the files, and those where we need a clone to
prepare commits in, this commit lines git.Export and git.Checkout up,
by embedding the former in the latter. This removes a long-running
duplication of a couple of methods.
There's also a modest move towards letting manifests be generated from
an Export rather than needing a checkout. In theory, all you need are
the files, but to get there in practice we have to break down some
assumptions (e.g., instead of requiring a git.Checkout, require an
interface from which you can get the directories of interest).