Clean up post-capture serialization in DeterminismController. No longer leak JSONActionSerializer instance, and don't spam the entire JSON recording when unable to open log file.
Introduce the TimelapseModel.Recording{Created, Loaded, Unloaded, Added}
events. These signal the lifecycle of recordings, and are used to
switch between views in the UI.

The capture-related events are still around, but are only used for
fine-grained progress information (such as whether capture is starting
or stopping).

This commit also gets rid of the last vestiges of the singleton
recording object. Clients can learn about new recordings via
RecordingAdded, and should respond to them being active for replay via
RecordingLoaded and RecordingUnloaded.