Refactored internals of edm::Principal to make future changes easier

edm::Principal is the base class for the classes which deal with Run, Lumi and Event data products. The way we get data will change for the threaded-framework. This refactoring lays the ground work for those changes. No functionality should change from this refactoring.