The Sim struct is used to communicate with a simulation. Every testbench
will be provided with a copy of this struct, and will use it to communicate
with the core simulation.
The CustomLogicFn is a boxed function that can be used to implement
things (like tri-state buffers or open collector shared busses) that
are otherwise difficult or impossible to model.