TokenFilter classes, rework new Field

* Setup an abstract TokenFilter class
* Create an EdgeNGramTokenFilter based on TokenFilter
* Setup TextField on search module that accepts an instance of TokenFilter to
  perform custom token filtering
* Rewrite tests to accomdate changes