Add new independent classes to manage the different dependencies

The class 'dependency.pp' is losing readability as new features are
being integrated. This patch proposes a new approach, using
different classes for different types of packages.