run() returns a result
- This result is stored in a new struct, SimulationResult
- I had to refactor Environment a bit to make this possible