Presynaptic components

Hi Andrew,

Here is my go at getting gap junctions to work in PyNN for NEURON. It currently works on a single node using the appropriate infrastructure for distributed MPI nodes, but doesn't work for distributed nodes yet because the Projection.get method doesn't appear to have implemented the 'gather' functionality its argument list suggests it will at some stage (if this isn't too hard I could have a go at it if you like). 

Included in this branch are also changes I made to implement general "index-based" connectivity (as opposed to distance-based connectivity), which passes the projection and the indices to an "index-based" expression, which can then do whatever it likes with them, like calculating the displacements between their somas for example (I implemented a DisplacementBasedProbabilityConnector as a proof of concept). I haven't rigorously tested it yet but it looks okay on a first pass. Was this along the lines of what you were thinking when I discussed something like this with you in Gif? 

Cheers,

Tom