Allow loading custom application shells.

If there's no brackets.app instance try loading a custom shell defined by
"appShellImpl" requirejs configuration path. By default, a void implementation
for the browser is loaded.

It would allows a single configuration point in the similar fashion it's done for the filesystem implementation.

A rudimentary appshell impl could be already found in [in-browser branch](https://github.com/adobe/brackets/blob/pflynn/in-browser-file-system/src/utils/Global.js#L119). Other customers, such as XDK, also need to hack global object creation.

it has no impact on Brackets when ran in Brackets shell.