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

Will add JSDoc later.
This is incorrect because `showFileOpenError` needs to return a dialog. Now it returns nothing.