Rewrite associative memory tests

These are similar to the prior tests, but much clean up.
A few significant changes:

- Run simulations for as little time as possible
- Better testing for similarity between probe data and pointers
  (see `similarity`; this could be made more sophisticated and
  moved to `nengo.utils.testing` when fixing #512)
- Added plotting to all tests that simulate
- Simplified winner-take-all test (previously was same as complex test)
Config defaults are now validated

This caused several test cases to fail, which are also fixed.
Usually, this occurred when a network default was set to something
that relied on a parameter that wasn't set; for example,
it is now an error to set a network's default encoders to be a
NumPy array, because the `n_neurons` of each ensemble is not known.
In these cases, changing the value to a distribution instead fixed
it, and is a better thing to do anyhow.

There was also a case in the SPA associative memory that the
Uniform distribution was being sampled and passed in. The sampled
value wasn't used anywhere else, so I just passed in the distribution
instead. This also solves a subtle bug that those distribution
samplings weren't seeded; passing in the distribution ensures that
they will be seeded.