Enhance format for blocks/links for active swap

Enhance format for blocks/links for active swap by "dimming" the remaining
blocks and swap links, while emphasizing the blocks and links connected to the
block with the mouse cursor over it.
Enhance format for selected blocks/links

Enhance format for selected blocks and the links for connected swaps by
"dimming" the remaining blocks and swap links, while emphasizing the selected
blocks and links.
Dim blocks connected to selected blocks

Dim blocks connected to selected blocks, to provide a visual distinction
between the two.
Fix `apply_swaps`: do not try to update empty tile
Add info table for selected/highlighted swaps
Display details for cost delta in popover

Add "select" button to each row in the swap information table.  When the button
is clicked, display details for cost delta calculation for the swap in a
popover element.

Make swap detail popovers draggable, to allow them to be repositioned within
the window.
Add draft version of net delta cost table popover
Generalize swap delta table code, add "to" delta

Generalize swap delta table generation and delta matrix calculation code.

Add "to" delta cost details table, regarding nets connected to the "to" block
in a swap.
Test for empty dataset in delta_cost_matrix method

If an empty dataset is passed to the `PlacementController.delta_cost_matrix`
method, return `{ delta_cost_matrix: null, totals: null }`.

See #6.
Only fill from/to table if delta matrix is valid

Only fill the swap delta cost details `from`/`to` table if the corresponding
delta cost matrix is valid.

For example, if the target of a swap is empty, there will be no delta cost
matrix, since there is no block to evaluate cost deltas for.

Fixes #6.
Merge branch 'delta_cost_popover'