Converted old_api.py to make Model calls instead

- Uncovered some issues with ensemble_array
Better handling of encoders

This enables a lot of use cases that apparently worked
in older versions of Nengo. Added unit testing to make sure
those use cases are all handled correctly.
Probe system changes

- Connections are now probable, but only with RawProbes.
  The idea being that you might want to see what data
  is going across the connection, but it's already filtered,
  so filtering again shouldn't be a thing.
  To do that, set up a filter on the raw signal in the connection.
- Because connection have to import probes, had to move probes
  into their own file due to circular dependency.
Implemented delayed object creation

- The core implementation is there, but untested as
  tests need to be updated because of API changes.
Better delayed creation

Now, instead of building the model, you ask the model to
create a simulator for you, using Model.simulator.
That simulator contains a full copy of the original
model, so that you can ask the original model to build another
simulator (with a different dt, or another simulator class)
if you want.

Units tests and example notebooks have been changed to reflect this.
The notebooks especially are more robust as a result of this change.

Still todo: updating the EnsembleArray template and its
associated examples and unit tests.
Ensemble arrays now working with delayed build.

- Also added examples and unit tests for it
Testing RMSE instead of allclose in test_ensemble