improve(robots): Revise Robots related to keyboard inputs

**Summary:** This PR improves the `Robot`s related to keyboard inputs. It clearifies actions such as:

- `push()`: Enter `KeyCode`s together. Press given `KeyCode`s in order, then release them in reverse order. Do not wait after each `KeyCode`.
- `type()`: Enter `KeyCode`s in sequence. Press and release `KeyCode`s one after the other. Wait after each `KeyCode`.
- `write()`: Enter `char`s in sequence. One or more visual characters. Wait after each `char`.

---

**Examples:**

~~~java
push(CONTROL, A);
push(ALT, F4);
type(BACK_SPACE, 5);
type(NUMPAD2, MULTIPLY, NUMPAD3).push(ENTER);
type(UP, UP, DOWN, DOWN, LEFT, RIGHT, LEFT, RIGHT, B, A);
press(SHIFT).type(LEFT, 5).push(DELETE).releaseAll();
write(".:uUüeEé树木한");
~~~

**Changes:**

Change `KeyboardRobot` to the following methods and implement them:

- `press(KeyCode...)`: Presses given keys, until explicitly released.
  - `pressNoWait(KeyCode...)` Same, but do not wait until events are processed.
- `release(KeyCode...)`: Releases given keys.
  - `releaseNoWait(KeyCode...)` Same, but do not wait until events are processed.
- `releaseAll()`: Releases all currently pressed keys.
  - `releaseAllNoWait(KeyCode...)` Same, but do not wait until events are processed.

Change `TypeRobot` to the following methods and implement them:

- `push(KeyCode...)`: Pushes a given key combination.
- `push(KeyCodeCombination)`: Pushes a given key combination.
- `type(KeyCode...)`: Types given keys one after the other.
- `type(KeyCode, int)`: Types a given key multiple times.

Add `WriteRobot` with the following methods and implement them:

- `write(char)`: Writes a given text character.
- `write(String)`: Writes given text characters one after the other.

Related: #43