This PR decouples the LS from direct file system access by implementing the proposals for workspace/files and textDocument/content under workspace/xfiles and textDocument/xcontent. The requests are only used when the client expressed support for them through ClientCapabilities, otherwise direct FS access is used.
This turns document content retrieval and recursive file search into async operations.
In turn, all server handlers can now operate async by returning a promise.
* Only hold content for open files in memory
* Add test for didClose
* Remove invalid URI formatting test
* Don't keep AST in memory
* Fix symbol search crash
* Change Project map to FQN => URI
Removes PhpDocument::load(), isLoaded(), unload()
* Add docblocks
* Rename some functions
* Extend documentation
* Correct docblock