log to tab

Every frame should have a dedicated tab for logging. This makes relevant errors/debug information show up nicely in the correct frame.

It remains a nice problem to associate the loggers to the correct tabs. As usual, the solution is dependency injection, rather than just using the global `logging.getLogger` function.

This is a refined replacement for #15.