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.
This comment isn't actually correct. This is not a pointer to the actual product, it is the pointer to the wrapper of the product. 
Side note: EDProduct is actually a bad name since it isn't the product. The better name would be EDProductWrapperBase but that ship has sailed.