Make the ProtocolHandlers glue between JSONRPCDispatcher and
ClangdLSPServer generic.
Eliminate small differences between methods, de-emphasize the unimportant
distinction between notifications and methods.
ClangdLSPServer is no longer responsible for producing a complete
JSON-RPC response, just the JSON of the result object. (In future, we
should move that JSON serialization out, too).
Handler methods now take a context object that we may hang more
functionality off in the future.
Added documentation to ProtocolHandlers.
Maybe there's a way to have a typed return value instead of Ctx?
This would give an interface that's harder to misuse: one can't forget to call reply or call it twice.
Here's on design that comes to mind.
Notification handlers could have void return, normal requests can return Optional<Result> or Optional<std::string> (with result json).
Optional is be used to indicate whether error occurred while processing the request.