Added an example of algorithm that uses a yield instead of a return.

These might be usefull if we want to do work outside of the loop, like
checkpointing or printing the log every other generation.
Or, since the generation index is still required by the logbook, it could be yielded by the algorithm:
```yield gen, pop, log```

Giving this loop:
```
for i, pop, log in evolution:
    print(log.stream)
    if i >= ngen:
        break
```