I think I understand this design. Its still a little confusing, but I think that isn't anything that some documentation (or making people read some example metrics) won't clear up.

 * Each metric object can be used and reused concurrently in many different contexts (I.E. for different evaluation tasks (algorithm dataset pair)). 
 * To manage this context a context object (the accumulator) of the metrics choice can be used (if needed) to manage binding multiple user level evaluations together into one larger metric level evaluation.
 * Thus the Metric class should _probably_ be stateless, and any important state needed to perform algorithm/dataset level evaluations should be entirely encapsulated by the accumulator.