refactor(typeahead): add typeahead controller

First step to adding typeahead controller. There is some duplicate code but that will be cleaned up in future PRs.