Implemented #, g*, g#, and other changes.

A bunch of specific changes have rationales in the specific commit log descriptions, but the TL,DR is that I've tried to implement things in a way that tries to achieve the main aim of StIm, and otherwise tries to fit with stock vim (hence setting v:searchforward).

Alas, my implementations probably can't be cherrypicked without at least splitting StIm(), as I introduced in 0c51677.