optimize task metrics collection
optimize task metrics collection

- remove tasks from self._state.tasks once they reach one of the
  READY_STATES (SUCCESS, FAILURE; REVOKED)
- use .inc() for task gauge with READY_STATES labels because they
  can't go down
- don't use separate event listeners for `task-received` and
  `task-started`
- don't use a separate dict to gather task latency information

zerok/celery-prometheus-exporter,zerok/celery-prometheus-exporter