Clarifications as well as additional functionality.

I added some comments to help explain the construction process and then
I also changed the class to only duplicate the data when the aggregation
operations required would necessitate the usage of the additional
memory.

I have quite a few use cases where the average only is required but for
debugging I sometimes want to see the min, max and median.  For those
cases I'm willing to sacrafice the 2x storage costs.

This implementation allows me to dynamically choose how much SRAM will
be used by this class.