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.