Product network for multiplying vectors
Basal Ganglia use nnls_L2nz and output filter
Updated CircularConvolution to use Product

Also better kwarg error handling
Updated EnsembleArray to use slice syntax

Also changed passthrough optimization to use transform_full
Added nengo.utils.testing.Timer

This is for quick time profiling of blocks of code.
We use this in a few places in unit tests.
Added tests for utils.decorators.memoize

Currently these are commented out.
Improved memoize decorator

Used the existing decorator decorator to make memoize
work in more situations than before.
Introspection on memoized functions will now work as expected.
The previously commented out tests now pass.
Update utils.decorators docstring
Simplified CircularConvolution

We're no longer bypassing product.A and product.B.
This involved some rearranging of CircularConvolution
to attempt to make it more understandable.

Shoutout to @hunse for fixing the circularconv transforms test
and explaining how the network works!
EnsembleArray kwarg dimensions -> ens_dimensions

To help differentiate it from the `dimensions` property.
Error if dimensions passed to EnsembleArray

- We want to make these look less like ensembles,
  so we raise an error that tells the user to set either
  n_ensembles or ens_dimensions
- Added a tiny test to make sure dimensions can't be passed
Added docstring for `CircularConvolution`.
Simplified test_memoize

Now we just test for overall cache misses instead of checking
each call individually.

Also now making sure it works with @property. Only works
if @property is applied first.
Decoder solvers now output helpful info.

- They all record the RMSE of the solution
- Some record other information about the solve as well
Minor improvements to decoder solvers.

- Fixed problems with _block_conjgrad with vector sigma input.
- Moved import statements inside solvers.
- Allowed sub-solver to be specified.
Fixed spike rate test

- was wrongly filtering spikes after a previous PR to remove
  cycles from the compute graph.
Connection functions can return 0-d and 1-d arrays
Gave subsolver test looser tolerances

- it was breaking on some machines
Using warnings module for warnings

Previously we used logging.warning. However, by default,
there is no logger installed, so they were never being shown.
Warnings are probably worth showing, so we'll use the warnings
module instead.

There was only one warning, it turns out!

Fixes #318.