Various optimizations in the sound class.

Not implemented methods and properties are marked as not-implemented.
Now sound data are loaded once and cached in memory for when an audio
  player will need it after. This should reduce spikes and improve perf.
After a sound has been played, Audio players is recycled for the next
  same sound instead of being disposed.
Both sound data and audio players are cached by URL.
Code is now more optimized related to removing audio players that are
  finished.
Changed events from iOS callbacks so they are dispatched at a safe point.
  This seems to have fixed random crashes with no callstack in the simulator.
Added a method to warm the sound cache to reduce synchronous loading of sounds.
Disabled the limiter on the max number of sounds played simultaneously.
  In our test case, we barely reach 10 sounds at the same time, so this
  was probably not the issue.