Refactor - move simualtion logger to its own object

This commit removes some code duplicated in the different versions
of replicate by creating a simulation logger and using its methods
to log.