Implement git.PackIdxV{1,2}.hashes_sorted_by_ofs()
Implement BitArray
Add repack command
Add repack test cases
Add repack documentation
Mention repack in README
Add helpers.BitArray.remove()
Add remove method to NeededObjects in repack command
Remove written objects from the needed objects during repack to save memory
Add a testcase for BitArray
Add a dry-run option to repack
Add a testcase for repack's dry-run option
Add documentation for repack's dry-run option
Fix parsing of a commit's tree sha

str.lstrip(arg) doesn't strip arg from the left, but all occurences of
the characters in arg.  So if we strip 'tree ' and have a sha starting
with an 'e' it is also stripped.  Skipping the first 4 characters is the
correct solution.
Only repack if objects are found
Only use PackIdx in NeededObjects
Add warning to repack's compression level option
Move NeededObjects, traverse_commit() and traverse_objects to lib.bup.git
Fix traverse_objects()
Implement repository wide locking

Add git.lock(), git.unlock() and git.is_locked(), which handle locking
of the repository.