Fixes for WASAPI / ASIO

1. WASAPI device names with special characters (eg. German Umlauts) were encoded wrong when converted to std::string. This got fixed by using the same workaround as previously was used for direct sound. 
2. When using any odd ratio of the WASAPI System samplerate there were missing samples in the buffer causing bad "clicking sounds". This was caused by rounding down the buffer size in the conversion method. Using roundf before casting to int gets rid of it. The sound is still terrible because there is no interpolation, but at least it doesn't kill the speakers.
3. Some ASIO devices call callbacks pretty early, so the pointer to the class instance in the callback structure has to be set before registering the callbacks.
4. Some ASIO devices say they support various buffersizes when calling ASIOGetBufferSize, but they only accept the preferred buffer size for ASIOCreateBuffers. I've added a fallback, to catch those.
5. The error handling for duplex initialization in the ASIO part wasn't correct. When the duplex input initialization failed, then the driver get's removed and the error handling in "openStream" tried to call into the ASIO driver which doesn't exist anymore. This caused a lot of crashs in various places and major head scratches.
6. Added a "preferredSampleRate" entry to the device info. This allows the program to set the sample rate for WASAPI to the system sample rate (which doesn't require sample rate conversion), and also it gives a good default entry for an audio settings dialog.