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 In
 -- "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 t
- A closed InputWindow now has height 0 instead of undefined.
- Please use inputWindowManager.hideInputWindow()/.hideInputWindowImmediately()/.getHeight() in place of KeyboardManager.hideKeyboard()/.hideKeyboardImmediately/.getHe
- inputWindowManager is a singleton and accessible in the window scope.
`this.sinon.stub(new InputWindowManager());` -> `this.sinon.stub(Object.create(InputWindowManager.prototype));`