Fixed bugs and improved overflow handling of AudioRingBuffer; Added audio stream stats packets

Issue 1: AudioRingBuffer read and write pointers did not differentiate between a full buffer and an empty buffer (in either cases, those pointers are the same).

Fix: An extra bool member _isFull was added to AudioRingBuffer to differentiate between the empty and full cases.

Testing: unit test for AudioRingBuffer tests samplesAvailable() return values for full and empty arrays.


Issue 2: AudioRingBuffer writeData() would reset the buffer (empty it) if the new data would overflow it.

Fix: Instead, the new data would overwrite some old data and the ring buffer would become full.

Testing: unit test for AudioRingBuffer calls writeData() to overflow buffer and data is read back to confirm that old data was overwritten correctly


Issue 3: AudioRingBuffer addSilentFrame() did not check if the requested number of silent samples would overflow the buffer.  As a result, the write-pointer was advanced no matter what, which means it would sometimes "lap" the read-pointer, effectively erasing a bunch of data in the buffer.

Fix: A check was added so that if an overflow would occur, the number of silent samples is reduced just enough so that the buffer fills up to capacity without overflow occurring.

Testing: unit test for AudioRingBuffer calls addSilentFrame() to overflow buffer and data is read back to confirm a smaller number of silent samples were added than specified to fill the buffer.


Issue 4: AudioMixer's jitter buffer stats cannot be seen by the client.

Fix: Added PacketTypeAudioStreamStats, which currently only contains audio mixer jiffer buffer stats.  Code was added in AudioMixer to send these out to every node once per second.  On the Application side, these jitter buffer stats have been added to the stats display in the interface and displays the msecs length of the mic jitter buffer, the max length of all jitter buffers, and the avg length of all jitter buffers.

Testing: debug prints were added in the AudioMixer side and Application side to ensure correct data was being sent, received, and displayed.