Optimisations, round 6: Font render caching

Instead of asking pygame (and its font rendering backend) to re-render
the same text over and over for many frames in a row, have a cache to
keep the most recently used texts.

A semi-related optimisation to Level.paint_text removes two blit calls
per frame which were displaying text that had already been displayed
at the very same location.