Line.append now accepts words instead of glyphs-and-widths.

Splitting words into glyphs is now handled by Line. Hyphenation is still
handled by Paragraph.

25% performance hit!
Make use of a coroutine aimed at recovering from the performance hit
suffered from the last commit.

Only a small performance boost.
Make use of lru_cache instead of manual doing caching in create_to_glyphs()
Pull Line's append methods into new_span() in the hope to speeds things up

Again practically no performance gain!?
Remove some code duplication

Apply lru_cache decorator to create_hyphenate to prevent slowdown.
Profile more functions
Avoid calling create_hyphenate if not necessary
Oops, no hyphenators were ever really stored in HYPHENATORS
Make use of the cached decorator instead of manually memoizing get_style
Set __slots__ on GlyphMetrics, as it will have many instances
No need for defaultdict; we can subclass dict
Bugfix: the position style attribute should not be lookup up recursively
Call form_ligatures and kern in the correct order and simplify word_to_glyphs
Fix issues with finding the source of table of contents and table cells
Transform show_glyphs() from a coroutine to a regular method

- this requires changes to how spaces are stored in GlyphSpan
- handle tab filling in GlyphSpan