This commit makes adding, removing and finding key maps an O(1)
operation instead of O(n), where n is the number of pre-existing maps.
In my testing, averaged over 100 iterations, this reduces the time spent
initializing NERDTree at Vim startup from ~73ms to ~9.7ms. That's with
only the default included key maps.
As a user it's a little jarring when a plugin maps over something I've
already defined. This patch fixes that problem, by using `<unique>` to
ensure unique mappings.
For more info see `:help <unique>`
Note: This has no effect if the mapping isn't already defined (that is,
NERDTree is defining a unique mapping), so this won't break for normal
users of the plugin.
Note: `:silent!` is needed to ignore the error that occurs when a
mapping is already defined.
Fixes#252
On some new versions of vim these files were being loaded before the
main NERD_tree.vim which was causing errors as dependencies werent
loaded in time. Move the classes into lib - so vim wont try to load them
until we tell it