added keyword token support
changed scanner to use channel iterator pattern