simplify the code in updateRecord()

changes:
- each metric handles what writer to use and how to use it
- MetricCollection will fetch a new metric to update record 
- MetricCollection handles how a new metric is returned

When a new metric is added, all we have to do is have the metric declare what writer to use and how to use it. (Like the way we did with RecordFilter and RecordReader)
Would it better if we assemble this collection outside the loop for all the records of a file?  You can declare it as Iterable.  But might be easier to back it up with a unmodifiable list and use it in a for-each loop.