Add /tests URL to give access to simple QUnit front-end tests

This commit adds a Django template, a URL to call it and an example file
to have a simple way to create tests for the client-side JavaScript of
CATMAID. QUnit is used for this. Tests should be placed in files within
CATMAID's 'static/tests/' directory. New files need to be included in
the 'templates/catmaid/tests.html' file.
Connect postsynaptic treenodes with connectors

When a treenode is activated, alt-shift clicking on an existing
connector creates a link with the node postsynaptic to the connector.
This allows interface parity with creating a new connector to which
the activated node is postsynaptic by alt-shift clicking in empty
areas. Closes acardona/CATMAID#712.
Only load tiles within slice boundaries

When artificially zoomed, clamp tile loading within slice boundaries
to prevent nonexistent tiles from being requested from the datastore.
Closes acardona/CATMAID#719.
Merge pull request #716 from aschampion/issues/712-presynaptic-connector-assignment

Connect postsynaptic treenodes with existing connectors via alt-shift click
Arbor.js: fixed error in computing flowCentrality.

Additionally, return the centrality in three flavors:
 * sum: same as before)
 * centripetal: N paths from inputs to outputs over a given node, traversing
from end nodes to root only)
 * centrifugal: idem, but N paths from root to ends.

Synapses on branch nodes were added up at least twice, leading
to negative centralities for some nodes when the accumulated count
of seen synapses exceeded the total.

Performance-wise, there is no need to normalize, neither to
dereference when the value is right there (e.g. seenI vs counts.seenInputs).
And no need to pre-construct an Object with counts in them for all nodes
when only branch nodes will need them. Thanks to traversing the sorted
partitions in order, branch nodes will populate the record of seen inputs
in subtrees (variable cs).

The new approach doesn't need to reroot when the root node is a branch.
(and neither did the previous approach, but the operation was inoquous other
than incurring in a performance penalty).
WebGLApplication: show 3 shading modes by flow centrality: sum, centripetal and cetrifugal.

Centrifugal highlights the link between dendrites and axon, which starts
at approximately the axon hillock.
Centripetal highlights the main branch of the dendritic tree.
The sum shows the overall flow over any node (same as "Signal Flow Centrality" before).

Additionally, the axon-to-dendrite split is done by using the centrifugal flow centrality
to better cut at the putative axon hillock.
MorphologyPlot: adapt to new Arbor.flowCentrality format.

Keeps using the same value as before (but correctly computed).
GroupGraph: edge risk measured by rerooting the neuron at the max centrifugal flow centrality.
CircuitGraphPlot: compute cable of hillock using centrifugal flow centrality.
Arbor.js: new function subArbors(nodes), returning an array of new Arbor
instances, each with at least one node from nodes. If all given nodes
are connected then returns a single Arbor.
WebGLApplication: improved cut for computing axon-and-dendrite synapse coloring.
CircuitGraphPlot: improved cut for computing segregation index,
and moved threshold for length of axon hillock at 0.8 of max centrifugal flow centrality.
Merge branch 'flow-centrality'
Merge pull request #720 from aschampion/issues/719-zoom-tile-boundaries

Only load tiles within slice boundaries
Connectivity widget: add missing parenthesis and quote to tooltip

The tooltip is shown if one hovers with the mouse cursor over the
synapse count table cell for one of multiple partner neurons. The change
relates to issue #721.
Connectivity widget: show neuron name service name in tooltip

The tooltip is shown if one hovers with the mouse cursor over the
synapse count table cell for one of multiple partner neurons. The change
closes #721.
Neuron name service: add refresh method

This method is a convenience method to update all name representations
and notify all registered widgets in one go.
Neuron annotations: refresh name service when annotation is added or removed

Now the neueon name service is refreshed (and all clients are notified)
as soon as an annotation is added or removed. This fixes #718 and
relates to #717.
WebGLApplication: new function Skeleton.splitByFlowCentrality
returning a map of node ID vs true for nodes that belong to the axon.
WebGLApplication: re-implement color connectors by axon and dendrite using Skeleton.splitByFlowCentrality.