add git.multi-gc

添加git.multi_gc功能。如果不指定fork的路径列表，与普通gc相同。指定fork_path时认为fork对repo因共享objects存在依赖，这时首先会在repo上dry-run一遍获取本repo需要删除的commits，然后结合各个fork从中筛出仍被fork依赖的commits，传递给prune，以保证prune时不会被误删
另外用了很多闭包，但是并没有看到用闭包的优点，用的仍然是全局变量。。。