Ported keypress improvements  from Angular-ui

Can register an actual character in the keypress, keyup and keydown
directives (e.g. 'a' instead of 65/97)

Handles the different values for keycodes on keyup/down and keypress
both with and without JQuery.

Tested with automated tests, IE9, latest Chrome and Firefox on Windows

Important: characters will be converted to lower-case. If you want to
capture an upper-case character, use "shift-char"