Cast to the pointer-to-type to increment the buffer
Use a macro for the record thread name
Use VECTOR_FOR_EACH instead of a manual loop
Check the PROPVARIANT type before use
Trace lparam and wparam message values
Set error if capture device fails to start
Add a cmake module to find JACK
Add a skeleton backend for JACK
Fill out the JACK playback backend

A few notes about it:

The OpenAL device's requested buffer metrics are ignored, and instead the
device will keep one JACK-sized buffer's worth of audio prepared for JACK's
next process request.

Output is restricted to 32-bit float stereo. Part of this is because JACK
requires a buffer size that's a power of 2 (measured in samples), and the
ringbuffer requires a buffer size that's a power of 2 (measured in bytes). A
channel count of 6 (5.1) or 7 (6.1) will not work without causing a sample to
split over the edge of the ringbuffer. Additioanlly, JACK doesn't provide
information about what channel configuration a device or set of ports has, so
there's no way to know what ports 3 and up map to (even the first two ports are
unknown, but assuming stereo seems to work well enough).

There is no device latency measurement (for AL_SOFT_source_latency) due to the
non-atomicity between the ringbuffer's read size and port latency. A method is
needed to ensure the ringbuffer's read size and port latency can both be
measured between the end of a JACK update cycle (when the port latency has been
updated with the newly-retrieved audio) and the following ringbuffer read
update.
Add an option for an increased ringbuffer size with JACK
Add JACK to the config utility
Add an option to prevent spawning a JACK server
At least measure the ringbuffer size for JACK's latency

We should also add the port latency, but there's currently no way to ensure
it's synchronized with the ringbuffer (the ringbuffer will update before the
port latency gets updated).
Don't set unused pointers to NULL, don't try to write 0 samples
Add a lockless ringbuffer

Largely copied from JACK, it's extended to work with user-specified element
sizes instead of bytes. This is necessary to be able to work with 6- and 7-
channel output modes.
Use the custom ringbuffer instead of JACK's
Try the device-specified channel configuration first

This does basically no checking that the channel config is correct, but should
be good enough for when non-stereo modes are requested.