Bug 1093537 - Move input app window management-related responsibility from KeyboardManager to InputWindowManager

- A lot of events that only affects inputWindow showing/hiding goes to InputWindowManager instead of KeyboardManager now.
- "RemoveKeyboard" concept is now separated:
 -- InputWindowManager._onInputLayoutsRemoved() is called by KeyboardManager to signify that some keyboard layouts have been removed (disabled from system settings, or uninstalled keyboard app). IWM will remove InputWindow references accordingly.
 -- KeyboardManager._onKeyboardKilled() is called by InputWindowManager to signify that a loaded and currently showing out-of-process keyboard has been OOM'killed. KeyboardManager has to determine a keyboard layout to relaunch.
- A closed InputWindow now has height 0 instead of undefined.
- Please use inputWindowManager.hideInputWindow()/.hideInputWindowImmediately()/.getHeight() in place of KeyboardManager.hideKeyboard()/.hideKeyboardImmediately/.getHeight().
- inputWindowManager is a singleton and accessible in the window scope.
- KeyboardManager had lacked tests about getting device memory and retrieving setting of enabledness of 3rd-party keyboard, which have been added (to InputWindowManager) in this test. Additionally, KeyboardManager.updateLayouts() is roughly tested now.