edm::Handle holds functor for exception construction

HLT Profiling done by Vincenzo Innocente showed that a large fraction of the time was being spent in setting up exception objects when non-existent data was requested. This was a waste of time since code was always checking the validity of the edm::Handle and therefore the exceptions were never thrown. 

This code has the edm::Handle hold a functor which can create the exception if that exception is actually going to be used. igprof measurements have shown this to be faster than constructing the exception.