Can now probe transform and decoders

All this required was adding these to Connection's "probeable" list.

Changed some of the learning tests to use these probes to
ensure that some kind of weight changes are happening.
The unsupervised learning test, for example, now asserts something.
Use decoder and transform probes in examples

Specifically, learn_communication_channel and learn_unsupervised.
In order to not crash computers, we sample these at a lower rate
than most probes.
Allow more flexible signal reshaping

Apparently the only reason we limited reshaping was to avoid
non-contiguous signals. This commit ensures that all signals
are C-contiguous numpy arrays, and therefore we allow any reshaping.

Note that there's a bit of weird edge case for scalars and the use
of ascontiguousarray; I filed a bug against Numpy for this, and
apparently there's no particularly good reason for it;
see https://github.com/numpy/numpy/issues/5300.

Also added the ability to use -1 when reshaping, like numpy arrays.
This ability is tested in test_builder.
Synapses now work on any ndarry shape

Previously, they assumed that the input would be a vector
(1D array). This commit makes the output shape identical to
the input shape (rather than the size).

FYI the use case for this is for filtering probed decoders
and transforms.
Test that learning rules are dt invariant

Assuming that the dt is below tau_ref, and therefore the spiking
activity isn't heavily impacted by the choice of dt.

Also added filtering to the decoder and transform probing
in examples.