Put an upper limit on UTF8 file sizes

This is for #7223

* Start the discussion at limiting files to 4MB and under before we refuse to load them
* Display a message if we've reached the limit opening a file
* Implemented in AppShellFIleSystem which is really the only place this could go without rearchitecting a lot of file system work but looking for feedback there too
I think it can be pretty simple to just use callbacks here:

* Change `masterPromise.done(function() {` to something like `function afterStat() {`
* Change each `masterPromise.resolve();` to `afterStat();`
* Remove the `masterPromise.reject();`
* Move afterStat() up above this block of code , to avoid JSLint complaints about forward references

The reason the original code was so complex was because it was running the stat() and read() in parallel -- but because of the max size check this code is no longer doing that (hence my note saying that comment is no longer true).  So it's actually a much more straightforward serial flow now.