Refactor renderer2

Following our discussion in the technical retrospective today, I'm resubmitting this for review. It's been rebased, so I'll let Jenkins tell me if it's broken ;)