Builder no longer modifies model

This is done mostly by not storing what the builder generates.
Some things that are necessary, like gains, biases, and encoders,
are explicitly stored in the builder's data dictionary,
which is passed onto the simulator. This forms the start of
the probe changes, but a lot of work still needs to be done.

The data dictonary passed onto the simulator is accessed as such;
i.e., the Simulator.data function has been changed to a dictionary.
Or, a class that exposes a dictionary like interface;
in actuality it is a mapping called a ProbeDict.

Neuron types were modified in order to not change them.
Rather than setting gains and biases, they are returned,
and must be explicitly passed to the `rates` function.
This almost means, however, that one neuron object can
be passed to multiple ensembles, which is good.

One final thing is that the SimulatorProbe is now gone.
The probe itself is used as a key to the data dictionary,
which isn't great because then the Probe objects are modified,
but this will change when implementing the new probes.
Moved PythonFunction to builder

- We no longer import it into nengo namespace (not user facing)
- Updated tests
Rename nonlinearities to neurons

While they aren't all necessarily neuron types,
they will essentially be treated like neurons in that
they can act as Ensemble.neurons.