Rename the Timelapse panel to the Recordings panel, since it shows
recordings and their details. Closes #118.
Rename TimelapseGrid to RecordingInputsGrid.
Add missing license blocks for RecordingsPanel files.
Implement ReplayTask and ReplayTaskScheduler, a simple interface for
running queued asynchronous tasks.

These will be used to manage workflows currently achieved with lots of
scattered checks, such as breakpoint scanning and Recording management
during capture.
Implement Automemoized specialization for SerializedScriptValue. History.state is now memoized. Closes #152.
Frontend: convert to putting __proto__ inside the prototype object literal, rather than assigning it later.
Add Object.prototype.onceEventListener(), which wraps listeners that should detach after firing once.
Add cancellation to ReplayTask, ReplayTaskScheduler.
Make ReplayTask and ReplayTaskScheduler methods chainable.
Convert TimelapseModel.pausePlayback to be task-based.
Convert TimelapseModel.stopPlayback to be task-based.
Extract common "ResumeDebuggerIfPaused" step. Make task definitions chained.
Convert TimelapseModel.startCapture to use ReplayTask. Extract TimelapseModel.stopPlaybackTask to a function that returns a new task instance.
Convert TimelapseModel.stopCapture to use tasks.
Remove TimelapseModel._captureDidStart.
Remove TimelapseModel._captureDidStop.
Add some debug logging to task infrastructure.
Change TimelapseModel.fastReplaying to TimelapseModel.replaySpeed and introduce speed constants. Convert TimelapseModel.replayUpToMarkIndex and TimelapseModel.replayToCompletion to use ReplayTask.
Fix bugs related to SavepointProvider. In particular, widgets had
assumed that the savepoint provider would be added after the widgets
were constructed, but this is not always the case. The fix is to look
for existing savepoint providers inside the widget constructor.
TimelapseBreakpointTracker: Don't perform a file-and-line lookup of a breakpoint if a breakpoint instance was provided.