new pipeline ui

ditch the graph rendering strategy. it was too prone to dramatic visual
changes as config changed, and encouraged 'designing' the pipeline via
config. should now be able to remove 'hidden: true'.

this new UI also more truthfully represents the propagation of resources
through the pipeline. rather than singular labeled arrows between jobs,
jobs now have entrance and exit lines, one per resource, and the
resources "thread through" the UI. hovering over a resource or a line
will highlight all occurrences of that resource throughout the pipeline.

interesting UX improvements:

* as a job is touches more resources, it grows in height to accomodate
  more lines passing through.

* for any given job, you usually just have to look at the previous
  column to see what its inputs are and where they came from. previously
  you had to sort of follow the labels.

* jobs with a resource as input and output (i.e. bumping a repo) now
  have an explicit input and an explicit output node, rather than
  rendering a little circle.

* if a resource is semitransparent, it means no new versions are
  introduced by that point, i.e. it only comes from versions passed
  through other jobs.

* if a resource is opaque, new versions can appear there, either because
  it's an explicit output or a direct (unconstrained) input to a job.

* hovering over a resource highlights all occurrences of it as an input
  or output.

improvements to be made in the future:

* when clicking on a constrained resource node, show only versions that
  satisfy its constraints?

* improve appearance of pipeline groups (previous 'clustering' was quite nice)

* optimize positioning algorithm; currently it's brute-force

[#83627264]