Handle notifications.
Reimplement Listener with pthreads.
Pend messages in a linked list.

+ Listener::reply
+ Listener::grab()
Make server a global variable.
Refactor Listener into NeoServer.

Give NeoServer a pthread to maintain--opening on creation, closing on
termination. Have the worker thread fee messages to `replies`
asynchronously.
Detect when vim exits.
Put notifications in a queue.

Original, I wanted to use callbacks, but this can be implemented over
the queue just as well, and running callbacks from the input loop my
cause unexpected delays.
Accept multiple messages from the server at once.

Do not stop reading after the first.
replies: mutexes and locks.

Lock `replies` while reading and appending. Don't sleep while waiting on
a message, wait on the condition, `newReplies`.
Simplification: NeoServer::method_id().
Fix NeoServer::request().

::request() needn't assume the user has the arguments in a container.
Accept arguments variadically and resort to request_with() otherwise.
Remember the channel.
main.cpp -> vim-shell.cpp; learn read_object
Neoserver::grab(id,out)
Restore NeoServer::request(name,x...) functions.
Fix NeoServer::request again.
Learn about Data.

Implement Data, which abstracts a vim object like a buffer, tabpage,
etc.
Move std::to_string(...) to NeoServer module.
Enhance thread safety.

Lock and cond-wait on notifications, just like replies--except that
since we have no grab() equivalent, remove notifications on inquiry.

When requesting messages, actually check it's a real message.

From vsh, grab messages only when they're ready.
Warnings are not errors.