Refactoring the UI interface to add flexibility

This commit introduces three (abstract) classes: WebUI, UITab, and UIPage.
The top of the hierarchy is the WebUI, which contains many tabs and pages.
Each tab in turn contains many pages.

When a UITab is attached to a WebUI, the WebUI creates a handler for each
of the tab's pages. Similarly, when a UIPage is attached to a WebUI, its
handler is created. The server in WebUI is then ready to be bound to a host
and a port.

This commit also breaks down a couple of unnecessarily large files by
moving certain classes to their own files.