Rework hashing, use a more extensible framework similar to n3876 proposal

std::hash specialization is a pain to work with, stop using that, and
just specialize a 'size_t hash_value(const T&)' free function.
Tweak keymap_manager style, fix missing move
Fix split selecting the buffer end

Fixes #241
Add support for BufInsert/BufErase hooks
Only remove trailing whitespaces on InsertEnd when last insert was auto indent

Fixes #242