It can compute various dimensions about a tree object in a Git
repository, in a way that is robust against git bombs.
For now it must be passed the path to a Git repository and one or more
tree object specifications (like `HEAD^{tree}` or `HEAD:src`). That is
likely to change.
To avoid starting up lots of processes, we use `git cat-file --batch`
to read trees. But for blobs we only need to know the size, so use
`git cat-file --batch-check` for blobs. This unfortunately means that
we need to keep two `git` processes running, which means paying the
git startup time twice.