Several tiny improvements that make parsing easier to understand.
No longer substitute bound special chars in front of a block.
"*(foo)" will no longer expand to "bar(foo)" but " * " will expand to " bar ".
When a token that is bound in the current lexical scope is found, the behavior
is now as follows:
- If the token is bound to a function, and occurs after whitespace and in front
  of a block then the token is substituted by the function.
- If the token is bound to something else, and occurs after and before
  whitespace then the token is substituted by the value it is bound to.
- If a bound token follows whitespace and a comma, and precedes whitespace or a
  block then the token is substituted by the value it is bound to.
math-cast no longer boxes primes in mi tags.
No more superfluous whitespace when inserting <p> tags.
Removed remaining mention of the :maybe-magic token type. Every special token now has its own token type.
Now three rules for bindings:
- Any bound token is replaced if preceded by a comma
- Special chars bound to fragments that are not functions are replaced if surrounded by whitespace
- Tokens bound to functions are replaced if they occur before a block
- Tokens bound to other fragments are replaced if they don't occur before a block