*** Overhaul of moment calculation, tuning of integration strategies for binned models **

  o HistFactory/PiecewiseInterpolation

    - Disable forceAnalyticalInt() since it is not used and prevents other optimizations

  o RooMomentMorph

    - Change ctor signature to take enum rather thab const enum& since it is equally efficient
      and the latter allows access from the workspace factory

    - Make internal cache transparent to optimizer

    - Delegate _all_ moment calculations (including binned models and integrated moments)
      to the upgraded roofit core interface that can now handle these efficiently

    - Attach morphing parameter as explicit server of RooLinearVar that translates input
      This will result in the correct interpretation of object dependencies in the
      likelihood optimizer (currently the moments depend on the morphing param, but
      are represented by constant objects in the internal representation - so the
      optimizer does not recognize these as dependent on a parameter). Do the same
      thing for the top-level RooAddPdf

    - Make moments ignore global inhibitDirty flag. This flag is set in numeric integration
      and summation, but since moments never depend on observables this would only result
      in frequent needless recalculation of rather expensive integrals

  o RooFit/Module.mk

     - Declare existence of new classes RooAbsMoment, RooFirstMoment, RooSecondMoment

  o RooAbsArg

    - Add new option for selected objects to ignore inhibitDirtyFlag global state.

  o RooAbsReal

    - Make moment() functions return a RooAbsMoment rather than a RooMoment to
      take advantage of new class structure with optimized specialized implmenentations

    - Reimplement moment() functions to return specialied RooFirstMoment and RooSecondMoment
      objects for 1st and 2nd moment calculations

  o RooDataHist

    - Implement caching for (full) sum of histograms, to speed up binned likelihood calculations

  o RooFormulaVar

    - Forward binning definitions of underlying objects, so that they can be used as sampling hints
      for numeric integration when use RooBinnedIntegrator is forced by the user,
      even if the RooFormulaVar itself will never be declared binned itself

  o RooMoment

    - Inherit from RooAbsMoment, remove implementation parts that were moved to RooAbsMoment

    - Force use of a RooBinIntegrator for moment integrals, if the underlying function
      is advertised as binned

  o RooAbsMoment

    - New base class for moment calculators

  o RooFirstMoment

    - New calculator for 1st moments using dedicated optimized implementation for 1st moments

  o RooSecondMoment

    - New calculator for 1st moments using dedicated optimized implementation for 1st moments

  o RooNumIntFactory

    - Extend interface of factory method createIntegrator() with additional argument that
      indicates if binned integration is desired.

    - Use RooBinIntegrator as default numIntegrator strategy for all non-open-ended binned integrals

  o RooObjCacheManager

    - Separate internal state flags for allowing cache redirection and forwarding of constant-term
      optimization calls, where were previously tied together

  o RooRealSumPdf

    - Only force internal 'analytical' integration if the observable integrated over is a fundamental.
      (So that in case it is an RooLinearVar Lx=ax+b, numeric integration can happen over the underlying
      observable x instead

  o  RooFactoryWSTool

    - Remove stray debug printouts

  o RooHistFunc

    - Extend logic in binBoundaries(): if presented observable is not present in list of pdf observables,
      check if it is present in the list of histogram observables. If that is the case, _and_ the
      corresponding pdf observable is an l-value transformation of the histogram observable, report
      the inverse-transformed binning in the histogram observable as binning for the pdf observable

  o RooProduct

    - Fix bug integration logic: explicity allow same function to appear multiple times in argument list
      (e.g. x*x*a)

  o RooRealIntegral

    - Don't do substitution x --> L(x) for (analytical) integration of invertable transforms for
      binned integrals (instead these are performed in x with inverse-transformed boundaries)

    - If on analytical integrals are performed, undo any substitution L(x) -> x so that subsequent
      numeric integration steps are performed in x and not in L.

    - Always requested binned integration for binned functions that require binned integration