Clean up #10193 fix by sharing code with existing implementation in LiveDevelopment.js,
moving shared code to FileUtils with unit tests. Also...
- fixes an unhit edge case in getParentFolder() (now getParentDirectory())
that behaves differently across platforms
- removes duplicate copy of getFilenameWithoutExtension() in LiveDevelopment.js
(copy in FileUtils was identical)
- add/fix some unit tests for two existing FileUtils APIs