Audio threading fixes

Memory related, see 02f49e897f39b4e0ce44adc1e9f4ca3361ee04c8 comments
for discussion

Notes:
- Not using send/read message for the threads anymore, just a single
bool in a mutex
- Moved the on complete event to the runCheckComplete function because
its a common event fire and cleans up the code further
- audio state remove sets the flags needed for a sound to not be in the
thread entirely, this is used when a sound is completed also