Add a DefaultDict (defaultdict with pretty print)

Shows the pretty printed version of itself as it's
repr.
Add ProductIdRepoMap as core of ProductDatabase

ProductIdRepoMap is a defaultdict(list)

Change ProductDatabase to use a ProductIdRepoMap as
it's product->repo map.

Add populate_content to support the old db format.
Add product certs with os_name in certdata
Start refactoring certlib

Split out the ent cert installer code

Eventually make this into a good place to
hook "I just installed an ent cert" things,
like branding updates

start refactoring certlib, aiee
Create UpdateReport in Certlib.CertLib and pass it
Split UpdateReport into base class and sub classes

UpdateReport is now EntCertReport
Rename CertLib->EntCertLib

And certlib.UpdateAction->EntCertUpdateAction
certmgr expects a ActionReport from Action.perform

create a HealingAction for HealingLib, reuse
EntCertUpdateReport for HealingAction.report.
Start splutting HealingLib into smaller
chunks

Make Actions have a ActionReport

Rename CertLib to EntCertLib and
certlib.UpdateAction to certlib.EntCertUpdateAction
reAction()'ify Factlib, add FactUpdateReport
reAction()'ify repolib, add RepoReport
HealingAction just uses an EntCertUpdateReport atm
CertManager split CertManager/HealingCertManager
The Action subclass is unneeded now.
Add ActionReports, certlib cleanup, lock cleanup

All *Lib things return an ActionReport now

We provide a "ACTION_LOCK" via injection now, and
test fixture provides a non file based one.
ActionLock moved to lock.py

*Lib objects have-a Locker to run things that need
locks
Inject an ActionLock, and a Facts class.

unittests inject an in memory lock for ActionLock,
and a StubFacts that doesn't grot around the file
system.

Fix tests and certdata.
Checkout idcertlib._status from it's report

idcertlib returns an ActionReport now instead
of returning an int status.

Also run the SubManFixture setUp
repolib.UpdateAction is now RepoUpdateAction

update tests for this.
Split Healing* into healinglib.py

add test_healinglib.py
Move IdentityCertLib to identitycertlib.py
Make IdentityCertLib use inj IDENTITY

add test/test_identitycertlib.py