cmd/guru: Emacs: run guru asynchronously using compilation-mode
cmd/guru: Emacs: run guru asynchronously using compilation-mode

We define a derived mode of compilation-mode, so that various
names say "guru" instead of "compilation", and use the hooks it
provides to apply our postprocessing incrementally instead of
all at the end.  It's much faster, and works nicely with the
new streaming referrers query.

Compilation mode requires a shell command, not an execve array,
so go-guru--compile-command joins the arguments with spaces.
go-guru--exec has been specialized for JSON mode,
and renamed to go-guru--json.

go-guru--set-scope-if-empty is now done by each mode, to avoid
the NEED-SCOPE parameter to go-guru--exec.

Change-Id: I692b8b28449b7cc17fd6251a152588f9d8b89ebc
Reviewed-on: https://go-review.googlesource.com/21772
Reviewed-by: Dominik Honnef <aeacd46bb4fd3f59504c7762d9af6bd04f20aa1f@honnef.co>
Reviewed-by: Alan Donovan <7069e9552f9d110b0a0f326b96f22f63fb99dfc1@google.com>

golang/tools,golang/tools,syreclabs/go-tools,syreclabs/go-tools,syreclabs/go-tools,golang/tools,syreclabs/go-tools,golang/tools,syreclabs/go-tools,golang/tools,syreclabs/go-tools