This is implemented by propagating the expected remaining space to all
widget draw calls. It is not currently as smart as it could be, but it
works well enough to let the last widget in a row/column fill things.
BarWidget-type widgets and the Launcher widget now fill remaining space
if their length is set to 0.
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.
Use of DateTime<Local> can lead to excessive inspection of the system
timezone.
Instead, propagate only a timezone-compensated NaiveDateTime throughout
the widgets.
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.