Nengo objects now have unique keys

This makes them properly comparable and hashable.

It's implemented by giving the model the responsibility for
assigning keys to objects. Right now, those keys are generated
by initializing them at the hash of the model's label
(in order to avoid key collisions for multiple models)
and then incrementing for each new object.

`Model.objs` and `Model.connections` are now dictionaries
so that keys static. Every object remembers its key
(`obj.key` or `connection.key`) so that it's easy to
retrieve objects from the model using only the key.

There's definitely room for improvement here, but it does work.
Open for suggestions on better (perhaps more meaningful) keys.
Added test for Model save/load
Readded test_seeding

- In test_builder
- Looks at the built model's params