Refactor message handling in audio

And other step in the direction of the API I recently made a pastebin dump of. Also fixes how and when we trigger seek and stream changed events.
Is the next part of the refactoring still coming, or has it been postponed? In other words: Should `teardown()` be split right away, or is the next refactor just around the corner?