Off screen rendering and retina support

- render layers off screen
- pixel doubled display support
- allow layers to rerender themselves without causing other layers to rerender
- split rich text support from highlighted text, this allows faster line finding algorithms ( O(N) )
- split canvas into canvas and scrolling canvas