Simulator improvements

Use the reference Nengo Simulator to simulate Nodes on the host.  A subset of the model is reconstructed for simulation on the PC.

Every Ensemble -> Node connection is replaced by a new InputNode and InputNode -> Node connection.  The InputNode knows how to communicate with the communicator object to get node input.  Every Node -> Ensemble connection is replaced by a new OutputNode and OutputNode -> Ensemble connection.

Nodes with `spinnaker_build` methods are removed from the host-simulated Network as it's assumed that they're handled appropriately already.

The result is quite impressive from a speed point of view! (Of course, should there be a faster simulator for Nodes there's nothing to stop up subbing that in instead!)

My only concern is that the `InputNode`s and `OutputNode`s need a reference to the IO communicator before the model is built.  This means that there is now an `__init__` and a `setup` method for the communicator, with the latter doing what the former would normally have done -- there may be a way to neaten this up, but I'm not sure what it is.

Also, a massive step up in testability I think :grinning:.