better Input Method Editor (IME) support

Features:

- Allow input methods swap with hotkey (E.g. left ctrl + left shift).
- Over-the-spot pre-editing style, pre-edit data placed over insertion point.
- Restart IME without segmentation fault.

TODO:

- Automatically pickup IME if st started before IME
This commit is contained in:
Internal Server Error - Gitea: Git with a cup of tea and freedom
500 Internal Server Error

Gitea Version: 1.28.0+dev-505-g31b4d79a84