Rework word_variations() to handle any length word.
Refactor indexed_variations().

* Previously, was only searching deeper in trie if substring
  exists as prefix. That's the right thing to do, but the logic
  was confusing. Hopefully, this is a less convoluted way to
  achieve the same thing.
Speed up is_valid() function.

Improved painfully slow way to find indexes of wildcards in a
given string. This knocks 3 minutes off the run time for the
large input.
Call is_valid() with substring where words join.

* Calling with entire string is wasteful, since we already know
  both parts of string are valid by themselves. We just need to check
  the "joint" where the words connect, and if the joint is valid,
  we know the entire string is valid.
* Results in huge speedup for large input: 4+ minutes -> 20+ seconds.