Buffered taps and sends, and improved xinsert callback API

The 'xinsert' unit can now have any number of clients, each of
which can be read, write or read/write (insert). All clients that
want it get their input from the 'xinput' unit inputs. The output
from all write clients is added to the unit output. If there are
no read/write clients, the unit input is automatically added to
the unit output, as a default bypass.

The old simplified callback API (although with 'Set' removed from
the call names) is now implemented over the new 'xinsert' unit.
It still works the same way, except it's now possible to attach
any number of callbacks to the same voice.

Also added a2_SendCallback(), since a2_InsertCallback() is now a
bit more special than before, and should only be used when you
actually want to cut the bypass and process audio inline.
(See "read/write" above.)

There is now a buffered stream interface as well, accessible via
the stream API (a2_Read(), a2_Write() etc). These streams are
opened with a2_OpenTap() and a2_OpenSend(), and are backed by
lock-free FIFOs for asynchronous operation without interfering
with the realtime engine context.

Both callback and stream xinsert clients have handles that can
be used for further operations, including a2_Release().

Closes #23.