Allow sub-classing of SimulatorRuntime

- Move methods form SimulatorSystem to SimulatorRuntime
- Allow users to provide a custom SimulatorRuntime
- Allow sub-classing of TransientMemory