First pass at keyboard and mouse events. They work, but probably still have bugs.

we should common out this code, there should be a sendNativeEvent that takes a native JS object with { type: ... and then it turns that into a java object and sendEvent sends that java object