refactor to split out neuron type implementations from a core interface