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:
 -- "keyboardlayoutsremoved" is used to signify that some keyboard layouts have been removed (disabled from system settings, or uninstalled keyboard app); or loaded InputWindows should be removed (mozmemorypressure in in-process keyboard), and InputWindowManager and KeyboardManager handles accordingly.
 -- "keyboardkilled" is used to signify that a loaded and currently showing out-of-process keyboard has been OOM'killed. This event only goes from InputWindowManager to KeyboardManager because 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.