* Included the function Simulation::do_steps() that generalises the functions that were implemented in the algorithm for doing a certain number of step.
This function takes the derived simulation and the step type as template parameter. The derived simulation must implement the following three functions:
*** double acceptance_probability(step, parameter) -> calculates the acceptance probability of a step
*** void handle_executed_step(step, parameter) -> does the necessary changes after a step was accepted
*** void handle_rejected_step(step, parameter) -> does the necessary changes after a step was rejected
The parameters are stuff that will be passed to all functions (e.g. temperature, total energy etc.)
* Modified the Metropolis simulation to use the new concept.
Modified the WangLandau::do_wang_landau_steps method to use the generic Simulation::do_steps function (included acceptance_proability(), handle_executed_step(), handle_rejected_step() and redirected the do_wang_landau_steps to the correct do_steps)
Changed the optimal ensemble sampling to use the generic do_steps function of class simulation. Fixes #23