Stream FFT data as bytes, not floats.

Saves network bandwidth and doesn't affect quality visibly (er, at
my screen size, anyway...). There is a fixed offset; it would be better
for it to adapt to the data, but that is not readily implementable.

In order to support this without incidentally breaking the (unused
half-baked) scope feature, added support for binary message types with
different data layouts, and renamed the already-misnamed 'SpectrumType'
and related objects to 'BulkDataType' and so on.
Use a blocking thread instead of polling for audio.