Make setTopo non-const to fix thread safety problems

setTopo is now non-const. This avoids the thread safety issues
and therefore the member data is no longer mutable nor std::atomic.
The framework is now used to guarantee that setTopo is called before
any modules atempt to use the data.
Make access to HCAL conditions thread safe

The setTopo method of the HCAL conditions container is now non-const.
Therefore HcalDbProducer now makes its own copy of each container
and calls setTopo on that copy.
The HcalChannelQuality is treated special since it is used by many
different modules. The producer now has a special 'produce' method
which reads the original HcalChannelQuality conditions from the
Record, copies it and calls setTopo on that copy. This copy is then
put back into the Record and is accessible with the "withTopo" tag.
Use thread-safe access to HCAL containers

The HCAL containers are no longer updated once published in the
EventSetup. Therefore when reading the conditions one must either
1) if using HcalChannelQuality, use 'withTopo' when getting the object
  from the HcalChannelQualityRcd
2) after getting the conditions, copy it and call setTopo on the copy.
CaloTPGTranscoderULUTs needs own copy of HcalLutMetadata

The change to the HCAL conditions containers requires a user of
HcalLutMetadata to make its own copy and then call setTopo.
Use the copy of HcalLutMetadata not the original from the EventSetup

The previous commit properly copied the HcalLutMetadata but then failed
to use it.
Merge pull request #6060 from Dr15Jones/makeHcalContainersThreadSafe

Thread safe access to HCAL conditions containers