Overlay was updated temporarily with a wrong text on insert command,
so when the suggestion backend didn't keep up the suggestion was
wrong.
Refactored some code to have less repetition when setting overlay
properties.
When corfu--candidate was ended up as nil, the overlay still held
previous value but was not updated as the error was raised in
the update function.
Additionally when the backend is not keeping up we use
the previous candidate to update what the user see using
all of the information we had (i.e. prefix and the candidate),
so we borrow a character from one and append/prepend to the
other when necessary. This gives a little better experience
when using slow backend such as lsp.