The API provided by refactoring lib doesn't provide enough flexibility
to get clangd's rename to behave as we expect. Instead, we replace it
with the low-level rename functions, which give us more control.
Bonus:
- performance, previously we visit the TU to find all occurrences, now we just visit top-level decls from main file;
- fix a bug where we wrongly filter out the main file replacement due to the different relative/absolute file path;
nit: most of the new uses of auto in this patch don't have a type that's obvious from the RHS, nor one that's hard to read, and should probably be expanded