clean up variable names for product_id.ProductManager
more test cases for productid.py
docstrings
more tests cases, for ProductManager.update_installed
no reason for ProductManager.__get_cert to be private

Change to _get_cert, makes testing easier.
add test cases for product id install scenarios
add some test cases for ProductManager.get_active
more test cases, inc failing one for "no active" case #859197
add test case for ProductManager.update() with no active repos
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.