Implemented risk measurement for edges in the connectivity graph between neurons.

The javascript side needs work.
graph.py: do not label branch nodes when minifying an arbor by synapse clustering.
graph.py: do not compute risk for autapses; rather, label them as so.
Better docs for a function in tree_util.py
graph widget: checkbox toggles for names and to cut names at the first semicolon.
graph.py: compute edge risk only when not minifying arbors.
Make the middleware report the full stack trace of any exception.
graph.py: label branch nodes appropriately in minified arbors.
graph widget: simplify and improve.

 * start off with a force-directed layout.
 * render branch nodes smaller in minified arbors
 * simplify GUI: no more "update" button, selecting the layout triggers re-layout.
 * acknowledge state: if short labels, or if no labels.
Merge branch 'master' into synapse-risk
Fix error in graph.py
graph.py: parse location string faster.

In [9]: %timeit x, y, z = eval('(10.23, 11.45, 13.67)')
100000 loops, best of 3: 8.78 us per loop

In [10]: %timeit x, y, z = imap(float, '(10.23,11.45,13.67)'[1:-1].split(','))
1000000 loops, best of 3: 842 ns per loop
tree_util: faster, and lower memory consumption.
graph.py: add missing import
tree_util: catch single-node condition for spanning tree
graph.py: remove print statement
Credits
tree_util: in spanning_tree, ensure the 'preserve' is a set.
graph.py: fix error in generating locations for use in synapse clustering
graph.py: generate sub-skeleton tags only when a skeleton has been split.