Profiling shows that `:sign place` and `:sign unplace` are slow despite being native vimscript functions. This commit minimises the number of such calls by only updating signs that have changed.