Great big editor, workspace, window, frame revamp.

This makes the overall structure of the editor somewhat sane again, and lays
the groundwork for window splitting, and (sensible) multiple top-level windows
in the same workspace.

The containment hierarchy now looks like so:

Editor
- Workspace(s)
  - Window(s)
    - Frame(s)

Previously editor was tied to a window and multiple editors could be open in a
single workspace, but they wouldn't share a lot of state that they should of,
and things were all wonky. Now Editor is for truly global stuff (not much), a
Workspace maintains a collection of buffers, which can be visited in a given
Frame inside a given Window.

Most of what was in Editor is now in Window, since that's what Editor sort of
used to mean. A few things are in Frame, since that's where you actually visit
a buffer, though a Window has a "focused" Frame, which is whatever frame is
currently active, and a lot of times that's a fine frame to use, so one need
not pass frames around everywhere.

This also introduces another major change, which is that all the UI and
rigamarole around displaying a buffer is thrown away whenever a buffer is no
longer being visited in a window frame. Previously we kept all that stuff
around (modulo some hacky hibernation where we tried to trim non-visible
lines). Now we keep nothing but the buffer and recreate all the UI stuff on
demand if and when the buffer is visited again. To say that this reduces memory
use is quite an understatement. (There are a few niggles that need to be ironed
out in this regard.)

Splitting a window into multiple frames is not yet supported, but most of the
necessary plumbing is now in place. I just need to implement the actual layout
of multiple frames in a window, and then add fns for moving between frames,
opening buffers in other frames, and adjusting the size of frames. Etceteras.
Beans/frank.
Track view state while buffer is inviz.

Now that we don't keep all the UI stuff around, we need to track the point and
scroll position for the next time we display the buffer.
Added "line tag" mechanism for tagging whole lines.

Also added Line.tagAt for getting the first tag of a type. Used that to make
Buffer.tagAt more efficient.
Support reloadables based on a set of files.