Use fontconfig to load fonts. Fonts can be added to the `fonts` map in
the config, and referenced from individual widgets' configurations for
customizability.
Fonts default to values "mono" and "sans" if nothing is set.
Move the matching in the launcher to its own struct and make it so the
matches are unique and we don't end up with 2 or 3 matches for the same
program. Change the priorities so that they are bundled together with
the fuzzy matching score and thus very good keyword matches will beat
out very poor name matches.
Keyword matches are always at a lower priority than name matches. It
would probably make sense to extend this into something smarter where
very good matches of keywords beat really poor matches of name.
1. Implement new layout API, replacing previous hard-coded layout.
2. Make the widgets (previously modules) configurable.
3. Split some widgets into smaller modules.
4. Configuration file (reluctantly JSON at time of writing).
5. More correct damage handling, copying damage to next buffer.