sim: Add new "Sim::" base, migrating a bunch of common logic over to that