Basic flow implementation

Should handle the case when flow has ended in a previous reporting interval but is called to report again. Right now, this case would result in a negative time_interval since self.end_time < self.interval_start_time.