Initial cut for Job-based project and file command groups. Project
command groups use a scheduling rule that enforces one Job-per-
project; file command groups use a scheduling rule that enforces
one Job-per-file within the same project.
External definitions for file URLs: Don't go through all of the extra
machinations of converting the URL to a URI, since that causes issuses
when the file path has spaces in it (URI won't parse). Just convert the
URL's path to a File and see if it exists.
Also, make the file URL in the preference page a proper file URL.
Simplify code more:
(a) Remove redundant reloadFile()'s. This almost completely removes
the HaskellEditor.synchronize() method, which has been replaced by
the HaskellEditor.updateOutline() method.
(b) Make editor folding depend on the updated outline, such that folds
are only updated when the outline is updated.
(c) Found a better way of getting at the editor's IDocument that doesn't
depend on the source viewer's existence.
(d) Couple more fixes that improve server interaction stability. Most
notable is when the server dies, make sure that all of the queued
commands are unblocked from sendCommand().