Simplify initialisation.
Reduce chance of dummy sign's id clobbering another.
Fix unnecessary modified sign in modified-and-removed diff.

This bug didn't affect anything because the unnecessary sign was
overwritten by the correct sign.
Minimise sign place/unplace calls to speed things up.

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.