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
The FileSystem code was written to avoid using Promises, so it would remain agnostic of which Promise library its client uses.  I don't know if that's still a worthy goal, but note that this would be the _first_ time we break that design principle... so we should be sure we're ok with it.  Otherwise we should tweak this to use callbacks instead.