Add $ to word boundaries for keyword matches

When matching JavaScript keywords, the start/end were simple word boundaries but
since JavaScript also allows identifiers to use '$' in the name, this would
result in a whole identifier not being matched as a keyword but if a keyword
were within the identifier, it would be matched and scoped.

Fixes #29