Rename TimelapseRecord to ReplayAction in the inspector protocol and backend.
Frontend: rename TimelapseRecording.allRecords to .actions
Frontend: change terminology from input "records" to input
actions. Keep records to refer to data points contained within a data
provider, such as the breakpoints provider.
Add loading/unloading of multiple recordings to the Inspector protocol.

This patch changes many things, but here are the important parts:

DeterminismLog now exposes a functor-based traversal API that iterates
over all actions in a specific queue. This replaces prior ad-hoc
iteration in the memory size calculation and action serialization code.

All other serialization code has been moved from DeterminismLog to
JSONActionSerializer, the only concrete serializer at present.

Several data types have been added to the Inspector API:
 * Timelapse.ReplayRecording
 * Timelapse.RecordingId

Several commands have been added to the Inspector API:
 * Timelapse.loadRecording
 * Timelapse.unloadRecording
 * Timelapse.getRecording
 * Timelapse.getAvailableRecordings

Several events have been added to the Inspector API:
 * Recording{Unloaded, Loaded}
 * Recording{Added, Removed}

DeterminismController and InspectorTimelapseAgent have been modified
to trigger these events through instrumentation and respond to the
commands. At present, these are basically stubs; neither have support
for multiple unloaded recordings.

DispatchableAction subclasses now optionally override isUserVisible().

Recording data remains streamed during capturing, but recording data
is sent en-masse when a recording is loaded. This exposed many
frontend bugs (which assumed streamed data), most of which were fixed.