Language Processor

I've added some code to the language processor. Yasha, maybe you can
fill in the parts I wasn't sure about? I'm not exactly sure why we're
using a keywordlist when we can use an array of keywords? Maybe I just
don't understand how you've structured it.
Merge remote-tracking branch 'origin/Ephraim'