Automatically unlock/enable audio context on iOS

On iOS audio is effectively muted until user activation, as described here: http://paulbakaus.com/tutorials/html5/web-audio-on-ios/

This code automatically tries to unlock it when `new Howl()` is executed and tries again on the first touch. This can be disabled by setting:

    Howler.automaticallyEnableiOSAudio = false;
Properly wait for the next touch. Make the method public
Expose supported `codecs` with a new global method.
Correctly clean up end timers
Merge branch 'pr/168'
Merge branch 'pr/163'

Conflicts:
	howler.js
Code cleanup
Create documentation for iOS update
v1.1.22
Prevent error when ctx doesn't exist for iOS test
Fix rapid-fire sprite playback failure in HTML5 Audio (only present in v1.1.22)
v1.1.23
Another small fix for error on older iOS versions
Improve performance of Howl::load for long URLs

The previous regexp was highly inefficient. It took 21 SECONDS to sniff
the type from a data-URI consisting of 128K characters.

The culprit is /.+\.([^?]+)(\?|$/.

With this patch, sniffing the type takes less than 1 millisecond for any
string.
Parse data-URIs instead of using XMLHttpRequest

Firefox is the only browser that loads data-URIs through XHR.
data-URIs cannot be loaded in Chrome, Opera, IE and Safari.
one can omit the second parameter in off

In the docs: http://goldfirestudios.com/blog/104/howler.js-Modern-Web-Audio-Javascript-Library
it says:
off: Remove custom events that you've set.
    event: String Name of event.
    function: Function (optional) The listener to remove.
Well, specifying only the event name ['load', 'end' ...] would trigger an error because it tries to fn.toString() anyway.
This commit solves that so you now can do:
sound.on('end', function(){
  alert('sound ended');
});
and later:
sound.off('end');
and it removes ALL handlers you would have for that event.
Code cleanup
Merge branch 'pr/183'
Fire 'end' event on unload when a sound is still playing
Merge branch 'pr/181'