Finish circular FFT buffer implementation.

* Finish first functional implementation of the RingBuffer2D class
  template.
* Add abstract `Recorder` class and derived `SnapshotRecorder` class.
  These classes are invoked used by `WaterfallBackend` to record
  waterfall data.
* Add thread-safe `Channel` class to facilitate communication between
  threads.
* Change the `WaterfallBackend` class implementation so that it uses
* `SnapshotRecorder` to make snapshots rather than its own methods.