Implement custom keyboard shortcuts support with a user key map file.

Will add JSDoc later.
Why is it an error to assign multiple shortcuts to a single command? I know we can only show 1 in the menu. I guess it's usually not the intent, so there should be a warning, but I think it should be allowed.