Generalize glasses for infix operators and variable ids

  * User can now add glasses for infix op by customization.
  * Variable ids glasses is definable by make vid glasses macro.
  * Some code refactor
More refactoring on haskell-glasses mode

  * Predefined glasses defines interface extraction
  * Source code structure massage
  * Add page separators
Fix some defects after refactoring
Regex black magic is rewritten for string, comment and lambda dot
Fix adjacent iop missing glasses bug after recent refactoring
Make awhens lazy on tests

Fix a hang bug in find lambda dot caused by finding parens non-lazyly.
Refactor out awhen/awhens code pair to choose matched lexeme
Use skip list for cpp code rather than removing glasses for cpp code afterwards

Fix a hang bug on wrapped lines caused by display cpp code normal
Fix unexpecting cursor advance after inserting blanks before glasses.

  * fix cases that insert-in-front-hooks only called once.
Let lambda dot uses glasses-lambda-lambda overlay category
Predefined glasses use defface facility to put face on them