knotmirror: prefer `cat-file --buffer` for frequent endpoints
ideally we should use this everywhere and completely remove the go-git
dependency. go-git consumes a lot of memory for large repos because it
loads pack index into heap memory. This is preferred way of other go
based git forges like go-git.
lots of code are copied from go-git implementation and slightly modified
to match tangled's data model.
Signed-off-by: Seongmin Lee <git@boltless.me>