All modules now implement the Logger interface.

- Extract a GenericPipelineModule that holds everything that is common to all
  modules (including the Logger interface).
- Update relevant code.