Simpler synaptic propagation in numpy

This checks whether a synaptic code only refers to synaptic variables (typical situation for the `post` part of an STDP rule) and then uses straightforward updates instead of the complicated general rule (which has to take repeated indices into account). This does all the logic in the template, which is not generally recommend, I guess, but has the advantage that we don't clutter the rest of the code with a distinction that is only relevant for the `numpy` target. Ready to merge from my side. Closes #164.