Removed unused variable from strlen_onscreen
MakeWinMsgEv now accepts a WinMsgBuf pointer, defaulting to global

I had intended to remove the global variable entirely, but the changes were too
far-reaching for me to be confident at the moment; they will be revisited later
in smaller chunks. Until then, to work into the existing code, MakeWinMsgEv will
use the provided pointer if set, otherwise continue to use the global; this will
have the effect of allowing the winmsg stuff to be re-entrant, while keeping the
remainder of the system working the way it is. (Note that MakeWinMsgEv is still
not re-entrant.)

This also restores backtick functionality which was broken recently; it seems to
have been using a temporary buffer to store the old winmsg contents in because
MakeWinMsgEv is not re-entrant. This temporary buffer has been replaced with a
freshly allocated WinMsgBuf.