Revamped completion to be fuzzy.

We're aiming for a nice compromise between fuzzy completion and tab/prefix
completion. Mainly this means we do fuzzy completion, but (will) prioritize
completions with an exact prefix match, and we expand to the longest shared
prefix if all the matches share one. Modulo sorting by closest match, this
already feels pretty good.

Matching is done eagerly now rather than waiting for a tab press, and match
refinement works from the originally generated set of matches (more or less).
Factored fuzzy matching into FuzzyMatch.

It now also scores the matches and returns matches sorted in order of match
quality. The scoring may yet need some tweaking.

It also also does DWIM case sensitivity handling. A mixed-case glob is case
sensitive, an all lowercase glob is case insensitive.
Moved tests into test module.

That's how we're going to roll for Scaled projects.

Eventually I may convert all projects to this approach and sort things out in
the various project implementations, but for now we'll just start with Scaled.
Better filtering when too many completions.
Better scoring, sorting.

We score consecutive matches at the very start of the string more highly than
the same match later in the string.

We sort by score, then by shorter string, then alphabetically.