Promisify new keyboard and fix replaceSurroundingText to new API

* This stops keeping state internally, because this already happens on the inputcontext object. If something is wrong there we should fix in platform.
* Change replaceSurroundingText API because implementation changed last week
* Make JSHint happier
* Let InputField return promises and use them, so we don't change state when an operation fails
* Remove promise monitoring. I don't really get what this would be good for. If this is to work around something it should be fixed in platform.

Tested it in Fx Nightly and seems to work nicely. The only thing is that sometimes the eventhandlers for surroundingtextchange and selectionchange don't get attached (though gecko fires them) and I have no clue why because in mochitest all is fine. I'll try on device and see what happens.