Add syntaxHintFor: to ExMap.

syntaxHintFor: takes an ExMapping and produces a syntax
hint for that mapping that has a command component
indicating the minimum prefix of the command name that is
not ambiguous.

Currently this doesn’t deal with two situations:
 - Some commands have two different names, e.g. tabedit
   and tabnew. Without knowing which one’s hint we’re
   looking for, we don’t know which of those names to put in
   the hint. For now we just use one.
 - Some commands have a prefix set as their name to
   disambiguate with other possible prefixes, for example
   buffer can be referred to as simply b. Right now we’re
   not taking that into account, so for example in the above
   situation, bu[ffer] would be the command hint, instead of
   b[uffer].
When providing a syntax hint, deal with prefix aliases.

Specifically, this makes a command like buffer, which has
an alias "b" to ensure that it is the command that is selected
when the user just types "b", produce a command hint of
b[uffer] instead of bu[ffer] as before.
Add syntaxHintFor:withPrefix: to ExMap.

syntaxHintFor: takes all of the possible aliases for
ExMapping and assumes the required prefix is at the
longest the shortest available alias. However, this doesn't
work when not all mappings are prefixes of each other, for
example with tabedit and tabnew. In these cases, we
introduce the withPrefix: parameter, which can be used to
provide a prefix that would choose between the available
aliases for the given ExMapping.

For example, calling syntaxHintFor: with the above tabedit
mapping would yield tab[edit] with no prefix or with any
prefix of tabedit. However, if you pass tabn as the prefix,
the command hint will be tab[new] instead.
syntaxHintFor:withPrefix: returns nil if the mapping is not in the map.

We weren't explicitly checking for this before. Now, if the
passed mapping does not exist in the receiving map, the
syntax hint is nil.