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.
Removed some unnecessary parts of objects

Specifically:

- Connection.eval_points (now bare attribute)
- Ensemble.neurons (now bare attribute)
- Neurons.default_encoders
- Node.size_in, Node.size_out (now bare attributes)
- Node.__deepcopy__
- PythonFunction.__deepcopy__
Probes no longer modified in build

- eval_points stored separately (like bias, gain)
- build_probe doesn't store things on the probe
Builder refactoring

- Added BuiltModel and NeuronsBuildState objects,
  which contain the artifacts of the build process
- Refactored Builder class to construct these objects
  and made other simplifications
- Organized the test cases a bit better, and ensured
  that previously skipped tests run properly