[RFC] Abstract UI termcap

Implement a builtin termcap based on the old gui. This is how Nvim behaves when the "abstract_ui" termcap is activated:

- No data is written/read to stdout/stdin by default.
- Instead of sending data to stdout, ui_write will parse the termcap codes
  and invoke dispatch functions in the ui.c module.
- The dispatch functions will forward the calls to all attached UI instances.
- Like with the "builtin_gui" termcap, "abstract_ui" does not contain any key
  sequences. Instead, vim key strings(<cr>, <esc>, etc) are parsed directly by
  input_enqueue and the translated strings are pushed to the input buffer.

With this new input model, its not possible to send mouse events yet. Thats
because mouse sequence parsing happens in term.c/check_termcodes which returns
early when "abstract_ui" is activated.

On top of the new UI infrastructure, a remote_ui module was added. It enables
the implementation of remote UIs via msgpack-rpc.

This will replace #781 and is the beginning of a complete refactor of the UI layer
I guess not. I think that callers should always be aware of the screen size so the best thing to do here is put assertions