On Windows use Virtual Key Codes instead of _getch()  for more reasonable keyboard input interpretation

Fix issue #100 and #136 #138 (the latter two seem like same problem).

I change WindowsSupport._getch() to WindowsSupport.readConsoleInput(), to get keyboard input virtual keys, and convert (some common) non-character input to escape sequences, that is, arrow keys, HOME, END, PAGE UP/DOWN, INSERT, DELETE ( Note: Ctrl/Alt/Shift state ignored). 

Arrow keys and DELETE automatically works fine. HOME & END need extra key mappings, so I add them in KeyMap.  This fix #100.

Input character by ALT + Numpad Numbers also supported, which fix #136 & #138. 

(Note: numpad keys not considered or tested yet, cause I have  no keybord with numpad at hand, only notebook keyboards...)

The most signaficiant change is Terminal interface's getOutputEncoding() method. It's needed because some OS has different platform default charset  than console default charset(see comments below). By default this method return null, e.g. 'not provided' (in TerminalSupport), and on Windows return codepage 'cpNNN'.

Thanks to @dulizhao , tested in Chinese/De/Fr (and more?) locales.  Call for more tests.