Split out a LineRenderer class.

This handles the direct rendering of a line, including highlighting
and wrapping.

Also change how the TextPaneCanvas stores its various properties,
so it's not doing lookups in multiple maps at once.

Issue #10