kernel: Add synchronous user_drv protocol

Added a put_chars_sync to the protocol that can be used to
talk to user_drv and made group use it. This is needed in order
to guarantee that bytes has been pushed to the tty port when
doing something like this:

io:format("halting\n"),erlang:halt(0).

Before this change the halting message could be lost in the message
queue of the user_drv process, this is no longer possible.
ssh: Handle put_chars_sync from group processes
erts: Make writing to non-tty fds non-blocking

If the fd_driver is given non-tty fds it will now use a proxy process
instead of doing a blocking write. An example of a non-tty fd is the
fd used by stderr, but could be anything handed down to the driver.
erts: Add stop handshake for blocking fd_stop

This is needed because otherwise there can be write requests
in the pipe that have not been processed after the port has
terminated. This can results in segfaults as the pdl and
ErtsSysBlocking structs have been deallocated.
Fix typoes/bad English in comments
Fix io:columns/0 timeout when invoked via user

This patch fixes an issue where io:columns/0 times out when invoked from
any application callback (or any supervisor/supervised module since the
group leader is inherited).

To reproduce the issue, one must simply call io:columns() from any
application callback. You will notice the process will block for 2 seconds
which then times out and returns {:error, :enotsup}.

Note this bug only happens inside the erlang shell (using -noshell or
escripts do not trigger the bug).

To fix the bug, it is important to understand how io requests flow from
application callback processes. Here are the steps followed:

1. Since io:columns/1 is timing out, the first step is to find out who is the
group leader for the application callback process. Using process_info/1, we
can see the parent process is the application_master and handles
io_requests by delegating them to the group_leader.

2. By inspecting the application_master process, we can find the group_leader
the message is sent is the registered process named user. The process is
running the group module which does handle io:columns/1 requests delegating
them to user_drv process.

3. The user_drv process does handle tty_geometry requests, except that a
clause above ends up short-circuiting all tty_geometry requests from the
user process.

This patch moves the user clause below the specific driver messages.