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.
Separated 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.