Ui for sbt-server

### Sub tasks

- Stream api ✔
- layout and widgets ✔
    - plugin layout
    - header
    - navigation and status shortcuts
    - panels
- home
- adapt tutorials
- build/compile
- code/editor
- run/inspect
    - full logs
    - actors
    - requests
    - deviations
- test
- monitor

Each bullet point should be a PR
here you are relying on the always-bound nature of SocketStream.push, but I don't think it would be terrible to just SocketStream.push.bind(SocketStream) here. If I'm reading the code here, this sort of looks like a bug until I go see that SocketStream self-binds everything.