Span and TextBlockPainter Refactoring

Addresses Issue #297.

Also includes some refactoring of TextBlockPainter.

Major thanks to @PragTob for help and pairing on this.