Streamline Twoway input handling

Instead of polling the current keyboard state, use keyboard event data