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)

yeah, I tried this in testing. I also noted that stopLooping will actually stop a non-looping sound. And if you start two looping sounds, you can only stop one. These are relative corner cases and looping is currently only used for one sound in turtle, so I don't think it is a big issue. I wanted to be sure that I allowed two instances of a non-looping sound to play concurrently (which would sound better) vs. automatically stopping and/or reusing the existing this.playableBuffer