iOS backend now uses OpenAL for SFX.

This comes with some restrictions. Chiefly, you must use uncompressed CAFFs on
the OpenAL path. If you use compressed audio (be that IMA4, or MP3),
AVAudioPlayer will be used. Unfortunately, it's possible to put IMA4 compressed
audio into a CAFF file, which is no longer supported. We have to differentiate
by file suffix, so the new prescribed approach (which is also used by Sparrow)
is to use AIFF (called AIFC when compressed) for IMA4 compressed audio. Here's
the cheat sheet:

  # creates sound.caf (little endian, 16 bit)
  afconvert -f caff -d LEI16 sound.wav
  # creates sound.caf (little endian, 16 bit, 22kHz)
  afconvert -f caff -d LEI16@22050 sound.wav
  # creates sound.caf (little endian, 16 bit, MONO)
  afconvert -f caff -d LEI16 -c 1 sound.wav
  # creates sound.aifc (IMA4 compression)
  afconvert -f AIFC -d ima4 sound.wav
  # creates sound.aifc (IMA4 compression, MONO)
  afconvert -f AIFC -d ima4 -c 1 sound.wav

The OpenAL path is only needed when you need to play lots of SFX fast fast
fast. It may eventually be possible to support IMA4 compressed audio in the
OpenAL path (OpenAL doesn't care, but we have to manually decode your audio
before passing it to OpenAL, which is non-trivial and takes CPU time). So it's
perfectly reasonable to use loadSound("foo") which resolves to foo.aifc. Some
SFX don't need to be played in rapid succession, and compressing them is
worthwhile.

This introduces another change, which I'd like to eventually make consistent
across all platforms, which is that each time you play() a sound, it is started
anew on a separate channel (and thus can overlap itself). You can only control
(adjust volume, stop, etc.) the *last* played instance, but if you're playing a
sound often enough to overlap with itself, that is highly unlikely to matter.
The upside is that this DWYM for the most part, because if you're playing a
sound rapid fire, you don't want it to cut out earlier playing copies
until/unless you run out of hardware audio resources.
Made CAF uncompressed, added AIFC to test that path.
Clear and restore our OpenAL audio session on interrupt.
Nix XRam cruft. Does nothing on iOS.
Nix some stray debug logging.
Read uncompressed audio via mmap() if possible.

Even if we can't mmap() it, this code still results in fewer copies and
instructs iOS to avoid caching the file data. This yields faster, more
predictable load times, no speedup on subsequent reads, which is usually the
right desired for games, which manage their own caches.
Set fill/stroke color when first handed a canvas.
Immediately update fill/stroke when alpha changes.
Protect against null canvas.

Noticed that setStrokeWidth does, so I guess some folks might be
expecting to fiddle with those sorts of things prior to ever actually
passing in the canvas.
Make some Shader Core private members protected to facilitate extension.

Otherwise, it is basically not possible to override/extend prepare()
API for new approach to multiline text.
New multiline text for Java.
Updated tests to use new multiline text.
New multiline text bits for Android.
Stubbed out new multiline text in Flash.
New multiline text bits for iOS.
New multiline text bits for HTML.
Oops, forgot Drawable interface in iOS and HTML.
We need to *use* the Drawable interface. Sheesh.
[maven-release-plugin] prepare release playn-1.8