Add ViCompletionReceiver/ViAsyncCompletionProvider protocols.

ViCompletionController also becomes a
ViCompletionReceiver, which is required to have a
completionResponse:error: method (ViCompletionController
already has this). This will be used for reporting new async
completion responses.
Added ViGCDAsyncCompletionProvider.

This is a base class to be used by completion providers that
need to report results in an async manner. It provides a
startCompleting method that is automatically invoked in the
completion pipeline and can be used to run the actual
completion lookup in the background. As completions are
received, they can be pushed to the completion receiver
by calling completionsReceived: with new completions.