Started work on keeping vimhooks sorted.
Things seem to work with the new logic.

s:findHookFiles finds all the hook files and adds them to
s:patternBasedVimHooks AS WELL AS s:allVimHooks, which is just a master List
of all VimHooks. When s:executeHookFiles is called for the first time from
some file, the function will initialize the value of
s:vimHooksByFilename[filename] to a list of all VimHooks whose pattern
matches the filename. It THEN iterates through all VimHooks in that list to
find any which match the given event and exeute them.

:ListVimHooks still depends on the s:patternBasedVimHooks data structure.
May have to change this logic so we don't have duplicate data structures
hanging around.
Remove usage of patternBasedVimHooks

Instead just maintaining a List of all VimHooks. When we call
executeVimHooks() from a new file we will create a new sorted list of
VimHooks whose pattern matches that file's name and add it to the
vimHooksByFilename dictionary. Then we go through this list and fire of any
hooks which match the associated event. We only have to create this sorted
list once for each file. After that, it is just left in memory and can be
referenced in O(1) time.

Updated :ListVimHooks to use allVimHooks instead of patternBasedVimHooks.
Add VimHook.isIgnoreable property

Instead of maintaining a dictionary of ignoreable hooks, just set a property
on the VimHook object.
Fix compareVimHooks sorting function
Remove debug echo statements and dead code