- rename tupel to "sub", as tupel is something completely different
- use Set instead of List for allCommit*() to not return duplicates
- heavily optimize allCommit*, stop early if all subs have been found
already, don't walk commits that we have seen before
- rename some variables to better matching names
- adjust/enhance unit tests