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 tested now (although only roughly).
Merge pull request #25840 from mnjul/bug_1093537_input_window_management_from_kbm

Bug 1093537 - Move input app window management-related responsibility from KeyboardManager to InputWindowManager. r=alive,timdream,rudyl