feat(WatchGroup): Allow measuring cost of running reaction functions and

    To be able to measure cost of reaction function, dirty check and/or
    dirty watch one needs to define ExecutionStats. ExecutionStats is
    configured using ExecutionStatsConfig object. This object can be used to
    define how many records to display when showing the stats, what's the
    minimum threshold (in microseconds) for a record to be considered as
    relevant as well as to enable and disable tracking the stats.
    
    One can define ExecutionStats, ExectionStatsEmitter and
    ExecutionStatsConfig like:
    
      m..bind(ExectionStats)
       ..bind(ExectionStatsEmitter)
       ..bind(ExectionStatsConfig, toFactory: (i) => new ExectionStats(...))
    
    The results can be displayed using ngStats object. To obtain a reference
    to an ngStats object type (in the console):
    
      ng = ngStats();
    
    To display maxNumber (defined using ExectionStatsConfig object) of the
    most expensive reaction functions type:
    
      ng.showReactionFnStats();
    
    To display maxNumber of most expensive evals type:
    
      ng.showEvalStats();
    
    To display maxNumber of most expensive dirty checks type:
    
      ng.showDirtyCheckStats();
    
    One can use ng.enable() method to enable tracking and ng.disable()
    method to disable trackin. To clear the results use ng.reset()
    method.
    
    To achieve least performance impact on the application make sure
    that the ExectionStats is null.
    
      m..bind(ExectionStats, toValue: null);
    
    That way no extra objects will be created and the impact on the
    actual application will be minimal.