A different API for processes

The overall change here is to make processes more like distributions.
That is, they don't need to know their dimensionality ahead of time;
this is instead done when sampling. Similarly, processes don't keep
track of state; instead, state is passed into the ``sample`` method,
and is changed in-place. This makes the API more complicated, but also
more consistent; see the tests and `SimNoise` for how this works.

In addition to API consistency, 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 the API, so I'm keen to never use it
again. This also makes it possible to use processes as a default with
the config system.

A few more detailed changes:

- Added some docs to `Distribution`
- Naming changes: `WienerProcess` -> `BrownNoise`,
  `LimitedGuassianWhiteNoise` -> `WhiteNoise`
- Removed `GaussianWhiteNoise` to avoid confusion with `WhiteNoise`.
  I've almost never seen anyone use white noise without band-limiting
  it. If someone wants non-limited white noise, they can either pass
  `high=None` to `WhiteNoise`, or make it using `SampledProcess`
  (as is done in `utils/test_processes.py`)
- Added plotting to `utils/test_processes.py` and `test_ensemble.py`