Use the make_shared template instead of creating a pointer with 'new'.
Reduce duplication by rewriting two pairs of similar functions into two template functions.

One has to be moved to Tags.hh because it's used in both Tags.cc and Tags_EXIF_subst.cc.
Change their return types be more appropriate, reducing code in the callers.
Add some const'ness to CMS.{hh,cc}.
Allow std::make_shared to call the private constructors of CMS::Profile and CMS::Transform.

Does this then allow anyone to call make_shared on the private ctor?