Styles

For those of you following at home, this pull request the basic building blocks for 'styling' elements - by which we mean defining a name style like 'heading' which consists of formats like 'underline', and then passing that around to do your formatting work for you. This will mean you can change the 'stylesheet' of your app on-the-fly without risking bad state.

Under the hood this ended up with quite a large refactor of how we were handling formatting and placeholders for terminal escape sequences in general. I think the outcome is cleaner, more logical code, although the problems still are somewhat knotty. Thanks to Charles Weaver for the stimulating architectural discussions!