Moved core objects to core.py

- Fixed some circular dependency issues with probes.py
- Also just makes more sense
Reorganization of probes and connections

Unified the two; there was a lot of overlapping functionality
in probes and connections. Now, there is a high-level
Probe object that just has an input signal, and filtering etc.
is done by connecting to that probe object.

Connections are now handled at the level of Nengo objects;
each object now has a `connect_to` function that connects
that object to the input signal of another object.
This means that new templates or types of objects can
be easily accessed through `Model.connect` by implementing
the `connect_to` function.

Minor change: added requirements files for generating
docs and running the test suite.