add test cases for product id install scenarios
Change *Directory subclasses to use super()

This makes it a little easier to mock out
parent classes for testing.
make DatabaseDirectory use super() like other *Directorys
more tests for productid and ProductDatabase

Add many cases for productid.ProductManager, and
add some cases for ProductDatabase, including
stubbing a DatabaseDirectory
let ProductData support multiple repos per product

add test cases
productid db now supports multiple repos per product id

This fixes almost all of the weird product/repo scenarios,
except of course, for the one I set out to fix.
more notes/docs
859197: add special case for products that provide 'rhel-' tags
move cert install/db stuff until we find all cases first.

Goal here is to find the list of stuff to be installed,
potentially call a plugin that could update that info,
then install. So a plugin could blacklist a particular
product id for example.

Also, more doc strings.
move cert deletion to after collection of certs_to_delete

Allow for a plugin/hook to manipulate the certs_to_delete
list.

Misc cleanup.