Added probes for learning rules.

- Signals in learning rules can now be probed.
- This required adding a learning_rule attribute to Connection similar
  to the neurons attribute on Ensemble.
- LearningRule was renamed to LearningRuleType to make space for the
  new LearningRule class (that Connection.learning_rule returns).
Use proper dictionary iterators.

- Making sure that we always use `iteritems`, `itervalues`, or just
  iterate over the keys, as appropriate.
Added noise generation to Simulator.

The simulator can now generate noise from arbitrary distributions
to increment signals.
Added PDF distribution for arbitrary PDFs.
Fixed label overwriting in spa.Modules
Added cortical action for "a = b * c"
Added action_build.py to reduce duplication

Refactored thalamus.py and cortical.py to use action_build.py.
Adjusted test_memory bounds

- Fixed logic error in test; adjusted bounds
- Added comments explaining bounds on tests
Adjusted radius so Buffers have radius 1.0
Fixed cleanup error for plt fixture

If a test had failed before the plotting commands, pytest would
report an additional error in cleanup because `plt.tight_layout`
fails when there are no axes. This commit adds a check for no axes
before calling tight_layout; the empty figure still gets plotted
though, as that doesn't fail.
Remove FeedbackGatedMemory

In the FeedbackGatedMemory, an ensemble is put in the feedback loop
of the integrator. When input is presented, the ensemble in the
feedback loop is gated. While this can work, it requires a lot of
tweaking of `synapse` parameters and scaling constants.

It was originally implemented due to bugs in previous version of
InputGatedMemory; however, those bugs have been fixed, so users of
FeedbackGatedMemory should be able to safely switch to using
InputGatedMemory.

Other changes:
- A bit of cleanup in InputGatedMemory. Removed unnecessary
  input and output nodes.
- Refactored test_workingmemory.py and shortened the simulation time
Relaxed bounds for SPA tests

Specifically for test_run_decay and test_convolution,
which were newly added. In both cases, I also added some
plots to figures out what was happening, and I used
the new `seed` fixture for seeding.
Improved LIF integration scheme for accuracy.
Split up builder.py

Split nengo.builder into a subpackage in order to organize
all of the stuff that was accumulating in there.
There may be a slight increase in the number of lines of code,
but I think this makes reading the code a lot easier, and future
edits to the builder will be a lot easier to merge/rebase.

Note that none of the actual logic changed; this was all code moves,
and import changes in order to get everything working.

One minor naming change: I removed the _synapse suffixes on the build
functions in nengo/builder/synapse.py. It should be clear that
those functions refer to synapses.
register_builder now a decorator

What you used to do with

    register_builder(build_fn, nengo_class)

should now be done with a decorator

    @Builder.register(nengo_class)
    def build_fn(...

Registering two build functions for the same nengo_class
will keep the most recently registered, and will raise a warning.
Added model.build for easier building

Now, instead of

    Builder.build(..., model, config)

it's possible to do

    model.build(...)

which is much shorter. The config is no longer passed into all
of these functions, as we don't use it yet; instead, the
build_network function stores its config on the model, and restores
it to its previous state at the end.