Miscellaneous AudioStream fixes

I audited a bunch of the base AudioStream classes and fixed a bunch of uses of endOfStream() and endOfData() not being used as they were intended. endOfData() should never be a hard stop, but rather only to mark that there is no data currently.

I also fixed the locks for QueuingAudioStreamImpl. Since both _finished and _queue are used across two threads potentially, they need to be protected by a mutex. Several of the locks were not used and were commented out (@fingolfin?).

I made sure a bunch of things still work with the changes, but there could possibly be regressions (from misuse too). Comments and testing would be much appreciated.