This is my last batch of changes regarding time integration.
- Additional checks here and there that the particles are synchronized. Especially gpart.
- Re-arranged the time-step sequence and simplified the logic in engine_step().
- Moved the decision of repartitioning from the main() to engine_step().
The re-arrangement of the time-step sequence allows for perfect energy conservation even when we rebuild, repartition or dump snapshots. Previously that was not the case as a spurious drift had to be introduced.