Document non-obvious behavior.
Refactor RecorderUI.

Now significantly more sane, and does not contain two classes merged
into one. New class also created, AsyncRecorder, which is exactly what
it sounds like.