Catsop layer: use slice alpha masks for overlay
WIP: offset stack hack
Catsop widget: scale slices to fit available height
Djsopnet: expand slice set when retrieving segment
Catsop widget: refactor SVG classes and styling
Catsop widget: basic slice selection WIP
Catsop widget: fix slice mask overlapping stroke
Djsopnet: support retrieval of conflicting segments
Catsop widget: fix link size and position

In segment graphs with few segments, links would often dwarf slices and
were attached wrongly (with the top of the links at the vertical center
of the slice, rather than the center of the links).
Catsop widget: add slice navigation arrows
Djsopnet: add view for segment constraint creation
Djsopnet: create segment for slice sets

Add a view method to create a segment joining a specified set of slices.
This is needed when Sopnet does not generate a particular segment,
usually due to area ratio between two slices in a branch passing the
configured threshold.
WindowMaker: factor appendToTab function

This function was duplicated as a local function. Since it is not
context-dependent, factor it into WindowMaker to be a utility function.
WindowMaker: relocate utility functions (minor)

Group and alphabetize utility functions at the top of the file for
clarity and discovery.
Catsop widget: organize UI with tabs

Move UI initialization to WindowMaker and separate graph controls and
tables into tabs.
Catsop widget: create segment from selected slices

Add the ability to create a segment from a set of slices selected in the
segment graph.
Catsop widget: load segments at location

Add a view to retrieve slices at a stack location. Add a button to the
widget that uses these slices to retrieve a segments for the segment
graph at the current stack location.

This could easily be reduced to one request/query, but this more general
approach is sufficiently functional and fast for current requirements.
Catsop widget: load location segments by default

Display segments at current stack location in the segment graph by
default when opening the widget. Clarify the function of the button
for the previous default, loading slices for the block at the current
location.
Djsopnet: support history of solution sets

Support storing core solutions as sets, identified in the
djsopnet_solution table. Segments are now associated with solutions,
rather than directly with cores. Solutions for the same core take
precedence over each other through the djsopnet_solutionprecedence
table. Only one solution can have precedence for a given core at a time,
enforced through a uniqueness constraint. Attempting to INSERT a
precedent solution when one already exists results instead in an UPDATE
to that core's precedence via a RULE.

Also create a correction table that annotates which explicit segment
solutions are being corrected by user added constraints.

As with migrations 0016 and 0017, these changes must be implemented in
two migrations because a column is added to populated table, updated to
reflect a relational graph change, and can only be set as non-nullable
in a subsequent transaction. Note that the backwards migrations delete
all solution sets that do not have precedence.
Djsopnet: mark solutions corrected by constraints

When constraining a segment, mark segments conflicting with that segment
as being corrected.