Set empty locations in log to null

Migration 0033 from 2c69ffb296a5ef27f4beeb8ee81fb6d01e4fc23e
unintentionally set locations that previously had `NULL` values to an
empty `float3d` composite with `NULL` fields. Set these values to `NULL`
again with a migration. Any effects of the empty composites were
mitigated with 626c527332f001649aea0cea14a185e16a50777b, so this change
is for data consistency only.

See acardona/CATMAID#759.
Connectivity widget: fix review sorting order

Add a sorting function to DataTables for percentage that parses out the
percent sign in the reviews column. This allows DataTables to sort by
reviews correctly and consistently.

Closes acardona/CATMAID#756.
Fix error when using the 'Z' key to create interpolated nodes.

Thanks to Akira Fushiki for reporting.
Fixed two errors related to the reformating of treenode.location.
Fix location format when creating label change request
Search widget: fix reference to old treenode.location format
Fix treenode.location format for synapse clustering

Untested because no call chain could be located (may be dead code).
Fix log message creation when changing confidence
Remove plpgsql install from user creation script

PLPGSQL is included in databases by default since PostgreSQL 9.0 (we
require 9.2), so explicitly creating it in the user creation script
prints a potentially confusing error and returns a error status to
scripted installs.
Annotations: speed up neuron name service back-end

For some reason Django's ORM creates very strange queries if things get a bit
more complex. When requesting annotations for the neurons modeled by a set of
skeletons, a lot of LEFT OUTER JOINs where used while INNER JOINS would have
been perfectly fine. Needless to say that this is a performance hit on large
tables like class_instance_class_instance. Therefore, this commit replaces the
Django ORM query with regular SQL. The query performance has improved quite a
bit and now even longer requests return again.
Connectivity widget: fix sort order for numeric columns

Generalize the percentage column sorter to handle cells wrapped in HTML
or other characters by stripping tags.

Closes acardona/CATMAID#768 and acardona/CATMAID#769.
User proficiency: display results below controls

Closes #761.
User proficiency: add small result header above plots
Arbor.js: new function upstreamArbor(cuts)

Returns a subarbor, consisting of an arbor from the root node
up to (and including) nodes in the cuts map, or end nodes.
WebGLApplication: new skeleton coloring mode "Downstream of tag".

Paints all nodes as grey, except for nodes belonging to subtrees
downstream of a specific tag, specified as a regular expression
(so that multiple tags can be matched).
skeletonexport: new functions treenode_time_bins
and compact_arbor_with_minutes.
New widget "Analyze Arbor", launched from the Navigator - Active neuron
and which currently shows only a table containing the amount of cable,
inputs, outputs, and estimate of reconstruction time, for the whole arbor,
the backbone, the terminal dendrites and the axon terminals.

The backbone is defined by the subset of the arbor within nodes
tagged with "microtubules end".
The axon vs dendrite are separated using the centrifugal synapse flow centrality.
AnalyzeArbor is now a proper SkeletonSource.
AnalyzeArbor: handle neurons for which synapse flow centrality cannot be computer.

Typically e.g. motorneurons, which lack output synapses within the CNS.
AnalyzeArbor has to unregister itself when closed.