Rewrite tab stop jumping and updating code

This should be simpler. Additionally it enables per-buffer expansion of
snippets.