graphicsView now caches canvas between frames

(scrolling is quite a bit smoother now, especially at high
magnifications)
now sharing the traceback prettyprinter

since exceptions can happen both in the user's script and within
context.py (due to syntactically valid grob misconfiguration within the
script)