lex: Eliminate duplicate code in lexEatChar()
lex: Update current macro status in hSkipChar, not lexSkipToken

lex.ctx->currmacro points to the toplevel macro which was expanded (whose
text is being read in by hReadChar() etc. via the lex.ctx->defptr buffer).
It is set by ppDefineLoad() when we expand a macro during lexNextToken(),
and it needs to be reset at the point where we leave the macro expansion.

Before this patch, currmacro was only updated during lexSkipToken().
This is the wrong place, because we can read chars from the input stream
and even create new tokens in other ways too, specifically the token
look-ahead which is used in many places in fbc's parser.

As a result it was possible that we finished reading a macro's expansion
text but didn't reset currmacro, preventing the same macro from being
expanded until the next lexSkipToken().

This issue was exposed here (and bug #744):
	http://www.freebasic.net/forum/viewtopic.php?p=202144#p202144

Starting with commit 51d974a9177cdd3d1e332771bf3c8c2904d4c54e, the
expression parser will do a lot more look-ahead than it used to.
This caused code like this to break due to "error: Recursive define not
allowed":

	#define A 1 '' trailing space
	print A or A

1. expanding the first A, parsing & skipping the number literal. Due to
   the trailing space, we don't leave the macro expansion yet though.
2. lexing the OR keyword, including skipping whitespace in front of it.
   During this, we leave the macro expansion, but currmacro isn't reset
   to NULL because it's only done in lexSkipToken() (that's the bug).
3. looking ahead to check the token behind the OR. This triggers another
   macro expansion of A, which is forbidden since currmacro (incorrectly)
   is still set to A.

This bug in the lexer can also be reproduced with different code snippets
and older fbc versions (see e.g. the 3rd new test case). Basically anything
using look-ahead is affected.

This patch simply changes the lexer to update the currmacro status whenever
skipping a char in the input stream. This way it's no longer related to
tokens or token boundaries.