Add a keyboardElement option to the map

This option allows specifying the element to listen to keyboard events on.

Full discussion in #1001.