I'm trying to think a bit about if there might be a better abstraction for this `states` list, to avoid this weird awareness split across the builder method, `SimNeurons`, and the associated `step_math` arguments. 

Could each `Neurons` class instead specify a set of dimensions (e.g. `(self.n_neurons, self.n_neurons, self.n_neurons)` in this case), that the builder uses to just create each zero signal, and then pass unnamed in `SimNeurons`? This would place everything inside the scope of `neurons.py`, and also collapse these 3 builder methods down to 1. But would this handle all situations?