use CDOSounds from BlocklyApps if Blockly not available

* extend CDOSounds to support options.volume and options.loop, add Sounds.stopLoopingAudio() and Sound.stop()
* change all calls to Blockly.loadAudio_() to BlocklyApps.loadAudio()
* in BlocklyApps.loadAudio(), use Blockly if available, else use CDOSounds if available (now passed into BlocklyApps appOptions as cdoSounds and stored as BlocklyApps.cdoSounds)

I was concerned about the case where options.volume was explicitly set to 0. (who knows - maybe a volume slider?)

var options = {};
options.volume = 0;
console.log(options.volume || 1);
> 1