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.
Also, the BCM learning rate is more reasonable now.
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.

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.
Add text-based progress bar implementation

The width readjusts depending on the terminal size.
Added some functions introduced in Python 3.3 to `utils.stdlib`
to support the readjusting depending on terminal size.
Add IPython2ProgressBar

This is used by default if we can detect that we're in the IPython
notebook, and we have widgets available.

Added some utility functions to utils.ipython to support this;
specifically, `in_ipynb`, which checks if we're in the notebook
environment, and `has_ipynb_widgets`, which checks if the IPython
notebook environment supports Widgets (i.e., is IPython>=2.0).

Additionally, the `utils.ipython` module can now be imported even
if IPython isn't installed. Since it's imported by `utils.process`,
which is imported by `simulator`, we have to do this to avoid
a hard dependency on IPython.
Add ProgressTracker class

This greatly simplifies the interface for those using the
progress bars in `utils.progress`, like `nengo.simulator`.
Add WriteProgressToFile and ProgressBar

`WriteProgressToFile` allows for non-visual tracking of progress,
which is useful for headless environments.

Since we have several progress trackers now, we make explicit their
interface by adding the `ProgressBar` abstract base class.
Only show progress bar if ETA > 1 second

Added the `AutoProgressBar` to support this. Used by default.
Only update progress every 50 ms

There was a bug in which the IPython2ProgressBar wouldn't update
the bar, despite the text changing. Apparently the problem was
updating too quickly, so I added the `UpdateEveryT` progress bar
to update the passed progress bar every `t` seconds instead of
on every step.
Separate update scheduling from progress bars

by making a ProgressUpdater abstract base class, which UpdateEveryT
now inherits from. Also implemented some other update schedules:
UpdateN (updates only up to N steps; useful for IPython < 1 notebook),
and UpdateEveryN (updates every N steps).

Implemented unit tests for these update schedules.
Reduce code duplication in cache tests.
Add DecoderCache.remove_orphans

This function removes any *.npy or *.pkl files that don't have a
corresponding pair. This can occur if Nengo is interrupted when either
creating or removing files in the cache.
Handle deletion of files during cache shrinkage.

Fixes #557.
Minor progress bar tweaks

- The default progress bar is only used if `True` is passed in to
  the `ProgressTracker` (or the `wrap_with_progressupdater` function).
- If `False` is passed to `wrap_with_progressupdate`, `NoProgressBar`
  is used.
- `ProgressBar`s now accept a string which represents the task being
  tracked. It selfishly defaults to "Simulation", as that's what we
  use it for, but it'll be handy to have this if we ever track the
  build process also. The default message when a progress bar finishes
  is now "{task} finished in {time}" rather than "Done in {time}".
- The `AutoProgressBar` now updates as usual if the task is finished.
  This is so that, even if the bar isn't initially shown and updated,
  there's still a handy message that the simulation finished.
Add SqrtBeta distribution.
Add documentation for SqrtBeta.
Add pdf to SqrtBeta.
Add cdf to SqrtBeta.