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
Yeah, I thought about that but chose to use promises to avoid spaghetti-logic to allow for a `stat` object to be passed in or read, failed or succeeded, > or < the maximum size allowed and a seemingly random completion order of callback code (hence the comment about running stat checking in parallell).  

Who do I need to convince?