more flexible tokens

I wanted to support any type of data returned from the server, so I abstracted the accesses to tokenValue and propertyToSearch into override-able methods on the settings. Basically you can use just use "id" in a server result like `[{"id": "some_tag"}, ...]` by passing in `propertyToSearch: null` or you can just use the "name" in a server result like `[{"name": "some_tag"}, ...]` by passing in `tokenValue: null`, or you can use a straight up array returned from the server like `["some_tag", "another_tag", ...]` by passing both `tokenValue: null` and `propertyToSearch: null`.