Run a single tick of the simulation. The pointer InContext is guaranteed (when called by the engine) to be the context allocated in CreateContext and can be assumed to be safely castable to any derived type allocated there. New callers should make care to make sure only the correct context is ever passed through