Add primitives for vim tag stack implementation.

Adds support for loading tags based on a configuration variable
containing a list of tag files to try, including ./* notation
(vim-specific oddity). Also a tag-stack that operates in the same
behavior as the vim tag stack.
Add Ctrl-] keybinding for tag jump.
Add tag pop, bound to Ctrl-t.
Add :tag ex vim command.

With no argument, jump to next tag in tag stack (unpop). With argument,
jump to tag, pushing the new tag in the correct location on the tag
stack.

Also aliased as :ta (since vim aliases it).
Fix 7.6.3 builds
… ;_;
This is stupid.
Fix unicode problem (closes #82).

Note this doesn't mean the syntax highlighting is now well-behaved
because most (all?) lexers don't consider unicode characters and may get
confused where things go.
Update for lens-4.4. Fixes #585.
fix compile with lens v4.4.0.1
constrain yi.cabal to lens >=4.4.0.1
Slight syntactic cleanup
Generalise lexer → scanner functions.

I stick module documentation in things I touched.
Migrate modes to lens + minor cleanup
Get rid of Shim: nothing uses it, it just bitrots.

Issue #480 relevant.
Wrap this thing before it pokes someone's eye out.
Merge branch 'vim-tags' of https://github.com/jhance/yi into jhance-vim-tags
Remove unused field in Mode type.

Exercise for the reader: try to find all unused fields in our codebase.
Move Data.Trie to its own repository
Use word-trie with fixed bounds