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.
I already asked Philippe this question.   If there is only one old version of EDProduct in memory, it gets a version number of 1.  So, I could have used 2 as the new version number.  However, just to guard against the remote possibility that there might be two different old versions of EDProduct in memory at once, in which case the version numbers would be 1 and 2, I decided to play it safe and use 3 instead of 2.  10 is wasteful, and Philippe does not like our use of it.  I already discussed all this with Philippe.  You can confirm this if you wish.