Cache brush/pen objects in the renderers
Refactor the caching for tidiness. Add it to TextRenderer
Add a cache layer around DataSource. Not sure if it is the best idea, but seems ok