[libcontacts] Improve separation between request initiation and other processing

We should start requests as early as possible, and other tasks can be
processed whenever we are unable to start new requests.