A different API for processes

The overall change here is to make processes more like synapses.
That is, they don't need to know their dimensionality ahead of time;
this is instead done when sampling. Similarly, we use partials to
bind state to the function, rather than having it be part of the
object, or be explicitly passed in on each sample.

In addition to an API more consistent with synapses, the big win with
this change is that it is no longer necessary to `copy.copy` processes
when using them in multiple ensembles; `SimNoise` takes care of this
instead (or this could be relegated to the builder in other
`StochasticProcess` use cases). Using `copy` (or, even worse,
`deepcopy`) was a huge problem in earlier iterations of Nengo, so I'm
keen to never use it again. This also makes it possible to use
processes as a default with the config system.

Another behavioral change is that `WhiteNoise` now reflects instead
of loops; that is, once you reach the end of the pre-generated signal
it will replay it in reverse, until it reaches the start, then it will
start playing forward again. This is to limit the discontinuity at
the end of the generated signal; with looping, it will jump from
one value to the next. With reflection, the derivative will flip but
the signal itself will still be sort of continuous. If the derivative
happens to be small at the end of the signal, then it'll be like it's
a continuous signal.

A few more detailed changes:

- Added some docs to `Distribution`
- Naming changes: `WienerProcess` -> `BrownNoise`,
  `LimitedGuassianWhiteNoise` -> `WhiteNoise`
- Removed `GaussianWhiteNoise` to avoid confusion with `WhiteNoise`.
  If someone wants non-limited white noise, they can either pass
  `high=None` to `WhiteNoise`, or make it using `StochasticProcess`
  (as is done in `test_processes.py`)
- Added plotting to `test_processes.py` and `test_ensemble.py`
Removed `utils.functions.whitenoise`

And used the `processes.WhiteNoise` instead. To make this relatively
easy from the end-user perspective, I added an `f` method to
`StochasticProcess` that returns a function that can be used as a
Node output. This basically just wraps the sample function and ignores
the incoming `t`.

Note that when used as a node function, processes maintain state even
if the simulation is reset. This is skirted around in `test_reset`
by using a white noise signal with half the duration of the simulation
so that it repeats. In general, however, we can't expect that node
functions will reset when the simulation resets.