Some improvements to how we handle load failure

This isn't quite where I want to end up, but it gets Josh's commit off a branch and it's better than what we had.

I thought about that (we could reply with an `ErrorResponse("still loading")`), but then the UI code has to handle the error and show it somewhere... I was thinking that if the UI wants to display a message like that, it could just look at whether the project has loaded and not even send the completion request. If a UI doesn't want to deal with it, then it can just unconditionally make completion requests and get back empty results.