Updated the publish algorithm to deal with deps

The following changes were made with respect what gets published
and what doesn't.
One of the main shifts from the previous publish algorithm is this idea
that "Package Groups and Errata filter rules merely indicate what rpms gets
copied". In other words when copying contents, if the user says "include
errata E1", what gets copied is all the packages belonging to E1 and their
dependencies.
A separate copy call is then made to copy all errata & package groups
over to the cloned repo.
Then in the cloned repo all "empty" package groups and errata are deleted.
"empty" here implies those errata and package groups where none of the
referenced packages in them belong in that repo.

So the updated algorithm now looks like
1) Compute all the packages to be whitelist/blacklist. In this process
   grok all the packages belonging to Errata/Package  groups etc  (work done by
   PackageClauseGenerator)
2) Copy Packages (Whitelist - Blacklist) with their dependencies
3) Unassociate the blacklisted items from the clone. This is so that if the deps
   were among the blacklisted packages, they would have gotten copied along in
   the previous step.
4) Copy all errata and package groups
5) Prune errata and package groups that have no existing packagea in the cloned repo
6) Index for search.

This commit also has some refactoring with respect to the generation of the
package/puppet clauses.

So for step 1 of the above algorithm, it uses the "PackageClauseGenerator" and
similarly for puppet modules, it uses the "PuppetClauseGenerator". The methods in
ContentViewDefinition publish "associate_contents" call have been moved around to
associate_yum_types and associate_puppet methods, to improve the code organization.

Commit also includes test code to cover the clause generators and associate contents
methods.