take reachability in consideration when cleaning redundant packfiles
This wraps the cleaning up of loose objects and redundant pack files
under a new functions, making the _prepare() and _complete() functions
unnecessary. It walks the reachable commits unconditionally since
that information is always needed and adapt how we purge loose
objects after this change.
The progress function is changed too and we log `ncommits' first,
followed by the number of loose objects, followed by the rest.
Pack files are now considered redundant when all their objects are
provided by a bigger pack or are unreachable.
ok stsp