Index VimHooks by id not dependent on filename

Well, it still uses the filename, but it just removes the ".disabled" part
if it exists. This means that :ListVimHooks doesn't have to go through all
the weird steps to maintain the internal dictionaries.
Get rid of three-dictionary nonsense

Instead of keeping track of global-, extension- and filename-scoped
VimHooks, this new iteration just has a single Dictionary which uses regexp
patterns to match against. Global VimHooks are now just specified with
pattern ".*", extension-specific VimHooks with ".*\.html", and filename ones
with "some-file.html". It's a bit slower since for each event we now have to
iterate through all the VimHooks registered with that event and compare
their patterns to the current filename, but I don't think there will ever be
thousands or even hundreds or even dozens of these things, so it seems
a reasonable trade-off to me. The benefit is that it's easier to understand,
easier to maintain, and makes more intuitive sense.

Also improved the ListVimHooks buffer output. Now there is a ">" pointer to
indicate where the "cursor" is. Removed some magic numbers.