Though this is not 100% compatible with SDL2, this makes API much
more consistent and less error prone. For example, you don't need
to store AudioSpec along with AudioDevice just to have your callback
lambda around, you don't need to copy AudioSpec from Wav file just
to fill in the callback (see wav demo), you are no more obliged to
take care of locking AudioDevice while replacing the callback.
std::function(std::function&&) is only noexcept in libc++, not
libstdc++, so calculated signatire of move ctor/assignment of AudioSpec
won't match specification