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.
How can this cast fail? isn't the protection already in ```ref.getProductPtr```? We need this to be fast so we should use ```static_cast``` if we've already done the safety check.