Remove unused font `message_font`.
Switch to font sheets.
Put interface screens into screen.hpp.

This is mostly just a useful way of getting a list of all of them, and
using the compiler to verify it's correct.
Read interfaces from JSON.
Make tab buttons part of tab-box.
Put tabs into JSON for parent interface.
Remove binary interface item support.
Read interface items with non-visitor.
Start encapsulating interfaceItemType.

Hide some implementation details.
Rename InterfaceItem; make non-copyable.
Switch to polymorphism of interface items.
Load interface resources when loading interface.

Cheaper than reloading them on each draw cycle.
Delete old logic that doesn't seem to apply now.

I guess there was some logic that would take place after handling the
button in a previous iteration of InterfaceScreen, but now, handling the
button is the last thing.
Fix possible integer overflow.

When waiting forever for the next event, we instead would have waited as
short a time as possible, causing a busy-loop.
Fix briefing screen buttons.

The mission briefing screen has additional mouse-down handling for
showing object data.  However, if we don't show object data, we should
forward the event to InterfaceScreen in case it's within a button.
Merge branch 'object-data' into support
Redraw after receiving every event.

If an event was received while drawing, we wouldn't redraw until we
received another event.  This caused problems in situations where we
frequently redrew, but receiving an event sent us back to a state where
we infrequently redrew; e.g. releasing the mouse button while object
info was being typed out.
Stop extracting interfaces.
Stop extracting rotation table.
Refer to interfaces by name.