Refactor withLoadedFile into withLoadedDocument and withLoadedDocumentAsync to better differentiate intent and also encapsulate where prerequisites are computed. Updated listExposedModules, moduleGraph, definedNames so that they too invoke withLoadedFile() for consistency. Note: These methods may prefer to work off the current document, but couldn't figure out that hook.
(a) Create factories for specific types of servers, i.e., standard I/O stream factories for the built-in and the user-defined scion-servers. Keep support for the network pipe servers as well, even if they're not invoked. (b) scion-server executable instance management moved to ScionPlugin via static methods. UI's ScionManager does not directly manage the project-to-scion instance association map; this is all done by ScionPlugin. (c) ScionManager will wail once when the scion-server executable factory is changed but can't start servers. (d) Support scion-server event changes so that editors can refresh their contents, etc. Found issue at server startup and async commands that needs fixing -- multiple commands get sent to the scion-server but need to be processed in temporal order. Also, looks like scion-server needs to send back the actual request id, not its generated id because these are not necessarily kept in sync. Still not sure why the outline page doesn't refresh...
Make the scion-server handling a lot more robust. (a) Add the ScionInstanceFactory, which handles and manages all instances (b) Add IScionInstance (a really beefy interface, BTW) to accomodate null and real Scion instances. (c) Patch everywhere else up. So far, seems to work fairly well, but need to work various bugs out.