Don't check dictionaries unnecessarily

This is the fix for the problem discussed at the Core Software meeting on Tuesday.  Dictionaries were read for every object that was ever in the file, rather than as needed.
Technically, what this pull request does is reverse what was done in April 2011, which removed EDProduct as a base class of Wrapper.  This was done because the presence of the base class caused an extra ROOT subbranch for each EDProduct.  It turns out that the extra subbranch was due to a ROOT bug, which has now been fixed.  Restoring EDProduct as a base class does not change the format of persistent files, or cause backward compatibility issues.  What it does do is remove a lot of unnecessary dictionary processing, and also reduces the amount of source code by 571 lines.  It is also absolutely necessary for ROOT 6.
I ran all framework unit tests and the short relval matrix on this request, and everything passed.
The very small changes outside the framework are the minimal necessary adaptations to the framework change.
Actually, it is a pointer to the base class of the wrapper of the product.  However, since C++ automatically handles any possible offset if everything is typed, it is OK to say that it is a pointer to the wrapper of the product.
I have changed the comment. It will be in the next commit.