ao/wasapi: new wasapi device monitoring interface

Implement skeleton IMMNotificationClient to watch for changes in the
sound device.  This will make recovery possible from changes shared
mode sample rate, bit depth, "enhancements"/effects and even graceful
device removal.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd371417%28v=vs.85%29.aspx

Signed-off-by: Kevin Mitchell <kevmitch@gmail.com>
ao/wasapi: improve error messages and add more debug statements

thanks to Jonathan Yong <10walls@gmail.com>
ao/wasapi: fix leaked deviceID

thanks to Jonathan Yong <10walls@gmail.com>
ao/wasapi: reenable the reset function

the race condition that necessitated disabling
this was fixed in
e4403523131a69a92a8418bb3714090a408680c7
ao/wasapi: add guid_to_string conversion
ao/wasapi: make calling of thread_init consistent with thread_uninit
ao/wasapi: request reset when device changes state/properties

this invovles calling ao_reload directly in the change_notify "methods"

thanks to Jonathan Yong <10walls@gmail.com>
ao/wasapi: tidy up better on failure

Before failures, particularly in the thread loop init, could lead to a
bad state for the duration of mpvs execution. Make sure that
everything that was initialized gets properly and safely
uninitialized.
ao/wasapi: tidy up better on failure

Before failures, particularly in the thread loop init, could lead to a
bad state for the duration of mpvs execution. Make sure that
everything that was initialized gets properly and safely
uninitialized.
ao/wasapi: more consistent error codes / message in thread init
ao/wasapi: add retry loop on AUDCLNT_E_DEVICE_IN_USE

this works around reinitializing too fast on device property changes