Project manager revamp

This is an updated/rebased ProjectManager revamp for #8788. This replaces #8885.

cc @ingorichter 

Here's my current list of issues/things to test that I'm looking into:

- [x] Failing ProjectManager tests
- [x] Switching project not updating the tree?
	- when opening brackets-git (which has a src folder) src is not getting updated. A merge algorithm problem?
- [x] Selected directory is missing trailing slash in `ProjectModel._selections`
- [x] brackets-git won't refresh on filesystem changes
	- need to ensure that when an item has to refresh its object is replaced
- [x] Test project base URL functionality
- [x] Right clicking on another node while the context menu is up does not move the context to that other node
- [x] Clear TODOs in new code
- [x] Rather than `selectIfVisible` the old code looks at whether the current doc has become visible. `curDoc = DocumentManager.getCurrentDocument();` and then `if (_hasFileSelectionFocus() && curDoc && data)`
- [x] Error cases for create and rename
- [x] Creation errors are not visible (that window timeout thing)
- [x] Check for invalid filenames on rename
- [x] The double click to rename shouldn't take effect if it's been *too long* since the first click
- [x] Control-double click toggles siblings
- [x] Alt-double click is supposed to collapse subtree but does not seem to do anything for me.
- [x] Improve [_fileSystemChange](https://github.com/adobe/brackets/blob/b5fa44af2071102105f5ed067336f7d2ba004e54/src/project/ProjectManager.js#L2175) handler?
- [x] `ProjectManager.showInTree` needs to expand nodes and not do anything if the path is outside the project or doesn't exist
- [x] Don't select directories
- [x] `ProjectManager.refreshFileTree` needs to make sure it doesn't run multiple times and has the 1 second delay between runs if there's one pending. Also double check that it's returning a promise that's resolved when it's done.
- [x] Run all tests
- [x] Positioning is wrong when node is scrolled into view (too far left)
- [x] Verify ProjectManager events
	- projectRefresh doesn't seem likely to be fired!
- [x] Can ViewUtils.getFileEntryDisplay go away?
- [x] Close dropdowns on scroll (Menus.closeAll())
- [x] ProjectManager._fileSystemRename may not be used currently, but should be.
- [x] Make the actionCreator private in ProjectManager
- [x] Make treeData private in FTVM
- [x] Delete jstree
- [x] The old JSTree code would not select a directory if you click the disclosure triangle, but *would* select it if you click on the name. Do we care about that? That was probably because there was no differentiation between context and selection.
- [x] Find In not working on directory #8944 
- [x] make (allow?) iconProviders to pass in a string
I disagree. ProjectModel is, purposefully, not a singleton. You don't listen to events at the module level, you listen to the events using this `on` method on a ProjectModel instance.