Change System.init to return a promise in order to work with platform initialization that may be asynchronous.

FlashPlatform's initialization is actually asynchronous, in that we must wait for Stage3DRenderer to acquire a Context3D before we're ready to roll. Since the Flash platform requires a Context3D before textures can be loaded, quickly loading textures after calling System.init was causing undesirable behavior, due a Context3D not yet being available. With this change, we can wait for a platform to become ready before continuing with other work.
stage3d gpu context loss handling works now by storing original bitmapdata and reuploading when context is regenerated
more lost context handling (check if I can access gpu in certain situations)