prune: prune dependencies recursively

prune was not recursive when checking dependencies, for example when we
have for example a shared part for openssl that is used only by a shared
part for curl that is not used, we had to run prune twice, the first
iteration would remove curl and only the second iteration would see that
openssl is not used.

This prune in a loop until nothing is pruned by the last iteration. To
support dry-run, we added a ignored_shared_parts parameter to ignore the
parts that are supposed to be deleted.

See merge request !205
12 jobs for master in 0 seconds
Status Job ID Name Coverage
  External
passed SlapOS.Eggs.UnitTest-Master.Python2

01:48:18

passed SlapOS.Eggs.UnitTest-Master.Python3

02:14:55

passed SlapOS.Eggs.UnitTest-Master.Python2

01:02:26

failed SlapOS.Eggs.UnitTest-Master.Python2

00:16:30

passed SlapOS.Eggs.UnitTest-Master.Python2

01:28:57

passed SlapOS.Eggs.UnitTest-Master.Python2

02:01:01

failed SlapOS.Eggs.UnitTest-Master.Python2

01:50:57

passed SlapOS.Eggs.UnitTest-Master.Python3

02:20:03

passed SlapOS.Eggs.UnitTest-Master.Python3

01:02:05

failed SlapOS.Eggs.UnitTest-Master.Python3

00:17:13

failed SlapOS.Eggs.UnitTest-Master.Python3

00:19:23

passed SlapOS.Eggs.UnitTest-Master.Python3

01:06:10