Use only one Pixi renderer and stage for now

[#58090240]

So each viewport is defined by separate DisplayObjectCollection, but
they share common stage and renderer.
Implement radial bonds rendering using PixiJS

[#58090240]
Playback: don't redraw model-time canvas if null!

[#58978580]
setup.rb: use non-minified JS in development

[#58988346]
Makefile: copy non-minified js to vendor

[#58988346]

Run "make clean". Although I improved the Makefile a little bit the Makefile still doesn't recognize two important dependencies:

(1) public/vendor depends on certain non-minified js files in the vendor/ folder (so, Make doesn't copy the non-minified js over)

(2) public/embeddable.html and public/interactives.html depend on the contents of LAB_JS_DEPENDENCIES defined in script/setup.rb (Make doesn't know about LAB_JS_DEPENDENCIES so it doesn't know to rerun the haml step)
Fix spurious tooltip events triggered by focus

[#58987332]
Detect whether we really should call .preventDefault() on touch events

[#58521766]

It let us use default browser gestures like pinch-zooming, panning etc.
when there are no actions attached to touch events (or they just don't
call .preventDefault()).
Always call .preventDefault() on touchend (!)

[#58521766]

To avoid browser-generated events like mousedown, mouseup and click.
Note that we already translated touchstart into mousedown and touchend
into mouseup. We don't want to trigger these events second time.

Unfortunately it also breaks double tapping gesture, but perhaps
we can't do nothing about it. FastClick breaks this gesture too.
Do not always dispatch "click" event on mouseup

[#58521766]

E.g. click can be cancelled by:
- touch move bigger than 10px - it means that user pans the viewport
  rather than tries to tap / click.
- second finger is added between touchstart and touchend -
  e.g. to do pinch-zoom.
Don't translate touchmove to mousemove when there are >= 2 fingers

[#58521766]

This lets us to support pinch-zoom even if user started gesture only
with one finger and added the second one later.
Prevent default action of mousemove during viewport dragging

[#58521766]

It will result in calling .preventDefault() on touchmove event,
if the mousemove is synthetic event translated from touchmove.
Do not dispatch click on touchcancel

[#59082510]

It should fix a few issues on Android devices.
Use foreground node as a click shield

[#57671280]

Firs step towards refactoring needed by cursors support. We should
have only one SVG above the canvas.
Group all viewports inside only two SVGs

[#57671280]

So there will be only one SVG in front of canvas, one behind and
additional SVG with background and gridlines.
Pass mousemove events through foreground layer to canvas

[#57671280]

Don't use real hit testing and expensive .elementFromPoint() method.

TODO FIXME: cleanup code related to events dispatching.
Move it to a separate module.
Do hit detection during mousemove in atoms-interaction, set cursors

[#57671280]
Use screenX/screenY of touch to suppress click

[#59082510]
[#59135952]
mixing liquids interactive calm atoms and tweak pouring

[#54874264]
At least remove blue "tap highlight" from buttons

[#58373748]
Keep flat structure inside model container (rm "viewport-container")

[#57671280]

Use z-index instead. It will be more flexible and simplifies things
a bit.