Fixed numerous issues and added locking

Added thread locking which will hopefully reduce the chance of OpenAL errors.

Fixed getPosition and setPosition which incorrectly used the channel count when seeking.

unloadSound() will now truly unload the sound and stop playback.

OpenAL errors are sticky and must therefore be cleared before read.

Side note: this entire class needs a complete rewrite.