Abstracted ExternalInterface

Added abstract methods for ExternalInterface features.
Refactored code to work with callbacks instead of expecting externalCall
to return a value directly.
Note that this change will break both the online and offline editor
until corresponding changes on those repositories.
Merge branch 'master' into abstract_external_interface
Treat offline extension reporters as requesters

Since StageWebViewBridge calls can't return values directly, extension
reporters must all be treated as requesters. This change adds a
"forcedRequester" flag to do so.
Note that there is at least one case where a block can be duplicated and
the forcedRequester flag will be dropped. This must be fixed if we
continue to use this method.
Merge branch 'bubble_hide_fix' into abstract_external_interface
Removed two unnecessary trace() calls
Use block spec for forcing requesters

In the offline editor, we need to force extension reporters to act as requesters. The previous method of doing so was unreliable because it didn't cover some paths through which blocks can be cloned and recreated; some of those paths didn't have enough information to know that the block they being handled is an extension reporter. This new method modifies the block spec on extension load, so it affects any block created through any path.
Merge branch 'master' into abstract_external_interface

Conflicts:
	src/blocks/Block.as
	src/extensions/ExtensionManager.as
	src/scratch/ScratchRuntime.as
Merge branch 'master' into abstract_external_interface
Merge branch 'master' into abstract_external_interface
Call into Scratch.app for JS URL fixup

Previously, ScratchExtension was using the File class to fixup JS extensions' URLs. This only compiles for Air apps, so that code had to move into the non-shared ScratchOffline repository. ScratchExtension now supplies the unmodified URL and allows ExtensionManager to call into Scratch.app to make the fixup. By default the fixup method does nothing, which is what the online editor wants, but ScratchOffline overrides the method to make the changes needed in offline mode.