Refactor implementation to be more idiomatic and improve runtime.

A lookup map is built when the nouns are read in, which allows us to perform an O(log n) lookup for tokens, rather than O(n). Instance variable is used rather than the somewhat more complex `:locals` assignment. Replacement text abstracted into a configuration variable, and token normalization refactored into a common method to ensure that tokens are always parsed consistently.