add git.multi-gc

添加git.multi_gc功能。如果不指定fork的路径列表，与普通gc相同。指定fork_path时认为fork对repo因共享objects存在依赖，这时首先会在repo上dry-run一遍获取本repo需要删除的commits，然后结合各个fork从中筛出仍被fork依赖的commits，传递给prune，以保证prune时不会被误删
可这个函数返回的是repo的dry-run认为应该删除但fork认为不该删除的commits，用all references也不会错，但一般而言，fork会频繁更新，它的local banch指向的commit在repo中都是解析不出，只有在shared clone时建立起来的remote branches能保证解析的出，而且如果local banch能解析出，那它应该是remote branches的一个子集